为什么在D中我无法通过Tid.send本地结构实例发送到另一个线程? 我想像这样简单处理线程通信:
void main()
{
...
tid.send(Command.LOGIN, [ Variant("user"), Variant("hello1234") ] );
...
}
void thread()
{
...
receive(
(Command cmd, Variant[] args) { ... })
)
...
}
如果我理解正确,D应该在堆栈中创建Variants数组 然后复制数组内容的发送功能吧?所以不应该有任何 有关同步和并发的问题。我很安静,这种并发性 很奇怪,我习惯用C#和C中的线程进行编码。
此外,我对shared
关键字以及创建共享类感到困惑。
Usualy当我尝试从非共享对象调用共享类实例的方法时,
编译器抛出错误。为什么?
答案 0 :(得分:3)
你应该对数组进行idup并且它能够通过,普通数组是默认可共享的(因为它们具有共享的可变间接)
编译器可以将发送重写为
Variant[] variants = [ Variant("user"), Variant("hello1234") ] ;
tid.send(Command.LOGIN, variants);
和Variant []未通过hasUnsharedAlias测试
你可以通过使数组共享或不可变(并在另一端接收适当的数组)来解决这个问题。