On Sunday, 10 April 2016 at 07:48:51 UTC, klimp wrote:
Is this corrrect ? Each task searches for the same thing so when once has found the others don't need to run anymore. It looks a bit strange not to stop those who havent find the thing:

Actually I have to kill the other tasks, in this slightly modified try:

import std.concurrency, core.thread, std.random, std.stdio;

void task()
{
    size_t i;
    while (true)
    {
        Thread.sleep(dur!"nsecs"(rndGen.front / 50));
        ++i;
        rndGen.popFront;
        if (i == 100)
        {
            send(ownerTid, thisTid, true);
            writeln("thisT gonna write globals: ", thisTid);
            if (receiveOnly!bool)
                writeln("thisT writes globals: ", thisTid);
            send(ownerTid, true);
            break;
        }
    }

}

void main()
{
    Tid t0 = spawn(&task);
    Tid t1 = spawn(&task);

    auto t = receiveOnly!(Tid, bool);
    if (t[0] == t1) send(t0, false);
    if (t[0] == t0) send(t1, false);
    if (t[1])
    {
        send(t[0], true);
        receiveOnly!bool;
        return;
    }
}

I got as output:

thisT gonna write globals: Tid(7ff8d3035100)
thisT writes globals: Tid(7ff8d3035100)
thisT gonna write globals: Tid(7ff8d3035400)

but I don't want the other spawned thread to continue until the end.

I should only get:

thisT gonna write globals: Tid(7ff8d3035100)
thisT writes globals: Tid(7ff8d3035100)

How can I kill a Tid ?

Reply via email to