Issue calling methods using std.concurrency

Casey sybrandy at gmail.com
Mon Apr 23 11:44:35 PDT 2012


On Monday, 23 April 2012 at 02:34:19 UTC, Ali Çehreli wrote:
> This works at least with 2.059 on 64-bit Linux:
>
> import std.stdio;
> import std.concurrency;
> import core.thread;
>
> class Foo
> {
>     int i;
> }
>
> void workerFunc(Tid owner)
> {
>     receive(
>         (shared(Foo) foo) {
>             writeln("Before: ", foo.i);
>             foo.i = 42;
>         });
>
>     owner.send(42);
> }
>
> void main (string[] args)
> {
>     shared foo = new shared(Foo);
>
>     auto worker = spawn(&workerFunc, thisTid);
>     worker.send(foo);
>     receiveOnly!int();
>     writeln("After: ", foo.i);
> }
>
> The output:
>
> Before: 0
> After: 42
>
> Ali

Ali,

I actually did print out the value being passed successfully.  
It's just that when I used the queue methods (enqueue and 
dequeue), it get this error.  The queue itself is shared, but 
none of the methods are expecting a shared value nor do I believe 
they should.

Casey


More information about the Digitalmars-d-learn mailing list