我创建了一个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 的结构?
我该如何解决这个问题
我认为这是因为 Tid 有一个 MessageBox 字段,它是一个类类型。
您可以将 OpaqueFaseSim 的 tid 字段输入为共享或 ___gshared,它将起作用:
struct OpaqueFaseSim{
Bar bar;
shared Tid tid;
// __gshared Tid tid;
}
Run Code Online (Sandbox Code Playgroud)