пользовательская структура не может быть передана через tid.send - PullRequest
6 голосов
/ 13 мая 2011

Я создал многопоточный симулятор, который в значительной степени опирается на нативное сообщение, передаваемое между потоками (не говорите мне, чтобы я шел однопоточным, это для моей диссертации на D, и мне нужно, чтобы это сработало)* после очень резкого клуджа, вовлекающего много бросков объектов в shared.у которого были некоторые уродливые ошибки в состоянии гонки.Я решил создать непрозрачный тип, представляющий объект, который может принимать сообщения, которые можно передавать без всякого приведения ...

нет такой удачи

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 Ответ

2 голосов
/ 14 мая 2011

Я думаю, это потому, что Tid имеет поле MessageBox, которое является типом класса.

Вы можете ввести поле tid OpaqueFaseSim как общее или ___gshared, и оно будет работать:

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