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!");
}
posted @   zjh6  阅读(10)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示