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