0
点赞
收藏
分享

微信扫一扫

d的ldc共享问题

​​原文​​

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!");
}


举报

相关推荐

0 条评论