On Friday, 25 January 2013 at 07:33:57 UTC, Stephan wrote:
On Friday, 25 January 2013 at 01:13:59 UTC, monarch_dodra wrote:
[SNIP]


Nope. That code works 100% for me.

Stephan

OK. I'm getting a better hang at the semantics of how message passing works.

I think I found I've identified the one of the issues I was running into though. I don't have much experience with MPI, so I don't know if this is a bug, or a user issue. In any case, I'm getting inconsistent behavior.

The basic premise of my problem is that one of my workers had a full mail box, while being set to "block". If it dies *while* the owner is blocked for sending, then the sender is blocked... forever.

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

void worker()
{
    thisTid.setMaxMailboxSize(10, OnCrowding.block);
    Thread.sleep(msecs(1000));
}
void main()
{
    auto wid = spawn(&worker);
    foreach ( i ; 0 .. 20 )
    {
        writeln(i);
        wid.send(i);
    }
}
//----

Basically, the worker sleeps for a second, the mailbox fills. The owner waits. The worker then dies, but the owner never wakes :(

The *inconsistent* behavior I'm getting though is that if I comment the "writeln(i)", then the program doesn't hang.

Say... what exactly happens when a message is sent to a dead thread? Seems like it just silently disappears...

Reply via email to