On Saturday, 15 December 2018 at 03:48:15 UTC, Neia Neutuladh
wrote:
On Sat, 15 Dec 2018 02:54:55 +0000, Heromyth wrote:
shared static this() {
writeln("running A in shared static this(),
sharedField=", sharedField);
Thread th = new Thread(() { });
th.start();
When you start a D thread, thread-local static constructors get
run. So don't start threads until your shared static
constructors finish.
If I encountered something like this, I would set up a queue of
actions to be run at the start of main() and fill them with
static constructors. Instead of this static constructor
creating a thread, it would enqueue a delegate that starts the
thread.
Yes, it's very dangerous to create a new thread in shared static
this(). For a big project, it sometimes hard to identify this
problem. Maybe, the compiler should do something for this, should
it?