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!");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现