Hi,

I've the code (see below) which produces an exception (SyncException "Unable to wait 
for condition")
unless "synchronized" is used when waiting on condition (Fedora Linux, 32 bit, 
DMD 2.055).

Do I do something wrong? Using "synchronized" when accessing anything that is 
synchronization object
by itself is a little bit counter-intuitive, IMHO.

---snip---
import std.conv;
import std.stdio;
import core.thread;
import core.sync.mutex;
import core.sync.condition;

__gshared Mutex         mutex;
__gshared Condition     cond;

void logs(string text)
{
        synchronized {
                writeln(text);
        }
}

void worker()
{
        logs("Worker started");
        while (true) {
                //synchronized (mutex)
                {
                        try {
                                cond.wait();
                        } catch (Exception ex) {
                                logs("Oops: %s" ~ to!string(ex));
                                return;
                        }
                }
                logs("Got notify");
        }
}

void main()
{
        mutex = new Mutex();
        cond = new Condition(mutex);
        (new Thread(&worker)).start();
        (new Thread(&worker)).start();
        (new Thread(&worker)).start();
        (new Thread(&worker)).start();
        Thread.sleep(dur!("msecs")(250));
        logs("Sending notify");
        cond.notifyAll();
        thread_joinAll();
}
---snip---

--
/Alexander

Reply via email to