On 04/22/2012 07:15 PM, Casey wrote:
Hello,

I'm getting some errors when I wrap a struct that I've written with
another struct. Here are the errors I'm getting:

tqueue.d(14): Error: function queue.Queue!(int).Queue.enqueue (int
value) is not
callable using argument types (int) shared
tqueue.d(15): Error: function queue.Queue!(int).Queue.dequeue () is not
callable
using argument types ()

Here's the receive block which the issue:

receive(
(T value) { queue.enqueue(value); },
(Tid caller) { send(caller, queue.dequeue); }
);

The queue itself is shared. Outside of that, nothing special going on. I
just have a class that I want to be able to in a concurrent environment
without having to modify the original class.

Any thoughts?

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

Reply via email to