为什么在 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
关键字和创建共享类感到困惑。
通常当我尝试从非共享对象调用共享类实例的方法时,
编译器抛出错误。为什么?
最佳答案
你应该 idup 数组并且它能够通过,普通数组默认是可共享的(因为它们有一个共享的可变间接寻址)
编译器可以将发送重写为
Variant[] variants = [ Variant("user"), Variant("hello1234") ] ;
tid.send(Command.LOGIN, variants);
并且 Variant[] 未通过 hasUnsharedAlias测试
您可以通过使数组共享或不可变(并在另一侧接收适当的数组)来解决此问题
关于multithreading - 为什么本地创建的结构不能发送到另一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22584058/