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