www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Writing malformed it?

[code]
import core.sys.windows.windows;
import std.concurrency;
import core.sync.semaphore;
import core.thread;

//struct sPool(T){ //<--- it good
shared struct sPool(T){
	
	T[]	_buff;

	Semaphore _sp ;

	auto pfReadAny()
	{
		_sp.wait();
		auto r = _buff[0];
		_buff = _buff[1..$];
		return r;
	}

	void pfPush(T v)
	{
		_buff ~= v;
		_sp.notify();
	}

	void Init()
	{
		if(_sp is null)
		{
			_sp = new  Semaphore();
		}
	}

}
//alias mPool = sPool!int; //<--- it good
alias mPool = shared(sPool!int);

//void Thr(shared(mPool*) t) //<--- it good
void Thr(mPool* t)
{
	auto tt = cast(mPool*) t;
	auto tid = GetCurrentThreadId();
	
	while(1)
	{
		auto a = tt.pfReadAny();
		writefln("[%d]Rk[%d]",tid,a);
		while(a--)
		{
			Sleep(1);
		}
	}
}
//void Thw(shared(mPool*) t) //<--- it good
void Thw(mPool* t)
{
	auto tt = cast(mPool*) t;
	auto tid = thisTid();
	while(1)
	{
		foreach(v;1..100)
		{
			tt.pfPush(v);
			//auto a1 = t.pfLast();
			writefln("Wk[%d]",v);
			Sleep(50);
		}
	}
}




void test2()
{
	mPool ltsy;
	ltsy.Init();


	auto tidr = spawn(&Thr,cast(shared(mPool*))&ltsy);
	auto tidr2 = spawn(&Thr, cast(shared(mPool*))&ltsy);
	auto tidw = spawn(&Thw, cast(shared(mPool*))&ltsy);

	auto wasSuccessful = receiveOnly!(bool);
	writeln("End.");
}

[code]

auto sem = new shared Semaphore();  // Sentence is wrong? why?
Nov 15 2014