原文
void main()
{
import std.stdio : writeln;
import core.thread;
// 用`-O`导致死循环.
writeln("Starting...");
bool done = false; // 使它`shared`,但不工作
//用`共享/g共享`没用.
new Thread({ done = true; }).start();
while (!done)
{
} // Wait for done
writeln("Done!");
}
不能用volatileLoad
,因为文档说,不能用来线程
通信.
在dmd
上共享/g共享
是工作的.
shared
是低级原语,你要用互斥锁/同步语句/std.concurrency
.
core.atomic.atomic{Load,Store}
可以处理它.
void main()
{
import std.stdio : writeln;
import core.thread;
import core.atomic;
writeln("Starting...");
shared bool done = false;//共享.
new Thread({ atomicStore(done, true); }).start();//加上原子存储
while (!atomicLoad(done))//原子加载.
{
} // 等待完成
writeln("Done!");
}