What sync object should i use?

Juan Manuel Cabo juanmanuel.cabo at gmail.com
Tue May 14 11:42:15 PDT 2013


On Tuesday, 14 May 2013 at 17:59:55 UTC, Heinz wrote:
> Guys, this is a precise example of what i'm trying to do. 
> You'll notice that there're 2 ways of waking up the consumer:
>
> /////////////////////////////////////////////////////////////////////
> Condition cond; // Previously instantiated.
> bool loop = false; // This variable determine if the consumer 
> should take the next iteration or wait until a thread calls 
> SetLoop(true).
> Object my_variable; // A value used for comunicating producer 
> and consumer. It's not a prerequisite to be set for an 
> iteration to happen.

You also need to declare Condition as __gshared. If you don't,
each thread will see a different Condition object or null,
because by default, every D global variable goes to Thread Local
Storage.

Any variables meant to be shared between threads need to be
either '__gshared' or 'shared'. You could also declare other
shared data as 'shared', but I don't think that's what you want
here.

To list all global variables not declared as __gshared, you can
compile using the -vtls switch.

--jm


More information about the Digitalmars-d-learn mailing list