digitalmars.D - Writing malformed it?
- sdvcn (76/76) Nov 15 2014 [code]
[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*))<sy);
auto tidr2 = spawn(&Thr, cast(shared(mPool*))<sy);
auto tidw = spawn(&Thw, cast(shared(mPool*))<sy);
auto wasSuccessful = receiveOnly!(bool);
writeln("End.");
}
[code]
auto sem = new shared Semaphore(); // Sentence is wrong? why?
Nov 15 2014








"sdvcn" <sdvcn 126.com>