gpt4 book ai didi

multithreading - 为什么本地创建的结构不能发送到另一个线程?

转载 作者:行者123 更新时间:2023-12-01 23:58:20 25 4
gpt4 key购买 nike

为什么在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com