On Tuesday, 12 February 2013 at 06:29:22 UTC, Ali Çehreli wrote:
On 02/11/2013 01:37 PM, monarch_dodra wrote:

> What should a manager do if it
> calls "receive", and notices the message wasn't meant for him?

Threads receive their own messages. If there is a specific receiver of a message, then the child sends it to that receiver. As FG said, every thread has a separate mailbox.

I think I didn't explain myself very well. I have my single "master" thread which has a "thread-global" mailbox, but I have 3 different objects that are sharing that mailbox.

Code example:

//----
import std.stdio, std.concurrency;

struct Manager
{
    this(string s)
    {
        spawn(&worker, s, thisTid);
    }
    string get()
    {
        return receiveOnly!string();
    }
}

void worker(string s, Tid owner)
{
    owner.send(s);
}

void main()
{
    auto ma = Manager("a");
    auto mb = Manager("b");
    auto mc = Manager("c");
    writeln(ma.get());
    writeln(mb.get());
    writeln(mb.get());
}
//----

How can I get my 3 managers to co-exist, when they are all sharing the same box? How can I make sure the workers are sending their messages to the correct manager?

It is possible to introduce threads to each other by their thread ids, which can be mapped to arbitrary names. (See register, locate, and unregister in std.concurrency.)

Yes, but in this case, the problem is not thread to thread communication, but rather thread to object

> Does any one have any (simple) literature on the subject?

My experiments have been documented in the following chapter:

  http://ddili.org/ders/d.en/concurrency.html

The "Thread names" section in there has a simple example that involves a third party introducing two threads to each other.

Ali

I have already fully read that tutorial, which was very helpful. Thank you.

Reply via email to