我已经创建了一个多线程模拟器,它在很大程度上依赖于线程之间传递的本机消息(不要告诉我单线程它是我的D论文,我需要让它工作)
在涉及许多来往于shared
的物体演员的非常残酷的kludge之后。其中有一些丑陋的竞争条件错误。我决定创建一个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."
}
为什么我可以传递Tid而不是只包含 Tid的结构?
如何解决此问题
答案 0 :(得分:2)
我认为这是因为Tid有一个MessageBox字段,它是一个类类型。
您可以将OpaqueFaseSim的tid字段键入为shared或___gshared,它将起作用:
struct OpaqueFaseSim{
Bar bar;
shared Tid tid;
// __gshared Tid tid;
}