https://issues.dlang.org/show_bug.cgi?id=16057
--- Comment #1 from Andrei Alexandrescu <and...@erdani.com> --- Test code (thanks Steve Schveighoffer) should not print "oops!" but does: import std.concurrency; import core.sync.mutex; import core.thread; import std.stdio; __gshared Mutex a; __gshared Mutex b; shared static this() { a = new Mutex; b = new Mutex; } void badThread() { synchronized(a) { writeln("a is locked!"); while(1) { Thread.sleep(1.seconds); } } } void main() { spawn(&badThread); Thread.sleep(1.seconds); synchronized(a, b) { writeln("oops!"); } } --