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

时间:2011-05-12 21:40:46

标签: multithreading d

我已经创建了一个多线程模拟器,它在很大程度上依赖于线程之间传递的本机消息(不要告诉我单线程它是我的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的结构?

如何解决此问题

1 个答案:

答案 0 :(得分:2)

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

您可以将OpaqueFaseSim的tid字段键入为shared或___gshared,它将起作用:

struct OpaqueFaseSim{
    Bar bar;
    shared Tid tid;
    // __gshared Tid tid;
}