用户定义的结构不能通过tid.send传递

rat*_*eak 6 multithreading d

我创建了一个mutlithreaded模拟器,它在很大程度上依赖于线程之间传递的本机消息(不要告诉我单线程它是我的D论文,我需要让它工作)

在经历了很多涉及大量物品投掷的非常残留的情况之后shared.其中有一些丑陋的竞争条件错误.我决定创建一个opaque类型,它表示一个对象,它可以接收应该能够传递的消息而不需要所有的转换...

没有这样的运气

struct OpaqueFaseSim{
    Tid tid;
    void send(...){...}
}

void foo(){
Tid tid;
long time;
    OpaqueFaseSim ofs;
    //...
    tid.send(ofs,time);//Error: static assert  "Aliases to mutable thread-local data not allowed."
}
Run Code Online (Sandbox Code Playgroud)

为什么我可以传递Tid而不是包含Tid 的结构?

我该如何解决这个问题

And*_*vić 2

我认为这是因为 Tid 有一个 MessageBox 字段,它是一个类类型。

您可以将 OpaqueFaseSim 的 tid 字段输入为共享或 ___gshared,它将起作用:

struct OpaqueFaseSim{
    Bar bar;
    shared Tid tid;
    // __gshared Tid tid;
}
Run Code Online (Sandbox Code Playgroud)