Multithreading 如何将纤维传递到线?

Multithreading 如何将纤维传递到线?,multithreading,concurrency,d,fiber,Multithreading,Concurrency,D,Fiber,我想知道如何将纤维传递给线 我成功做到这一点的唯一方法是在共享之间来回转换 自动光纤=新光纤(){ }); 自动t=spawn(){ 自动fib=仅接收铸造(光纤)!(共享(光纤)); 书面形式(“fib”); fib.call(); }); 发送(t,cast(共享(光纤))光纤); 但这似乎并不正确。我想我还没有完全理解shared的含义 我必须将光纤投射到共享,因为没有光纤,我不能将其发送到线程。我不得不把它放回光纤,因为我不能在共享光纤上调用fiber.call 将光纤传递到线程的正确

我想知道如何将纤维传递给线

我成功做到这一点的唯一方法是在
共享
之间来回转换

自动光纤=新光纤(){
});
自动t=spawn(){
自动fib=仅接收铸造(光纤)!(共享(光纤));
书面形式(“fib”);
fib.call();
});
发送(t,cast(共享(光纤))光纤);
但这似乎并不正确。我想我还没有完全理解
shared
的含义

我必须将光纤投射到共享,因为没有光纤,我不能将其发送到线程。我不得不把它放回光纤,因为我不能在共享光纤上调用
fiber.call


光纤
传递到线程的正确方法是什么?

目前不支持跨线程移动光纤(可能永远也不会)。使用共享可能会以某种方式起作用,但这是危险的,我不确定它是否能在所有编译器中正常工作。更多信息可在此dlang论坛帖子中找到:


文档是否有误?“请注意,不要求光纤绑定到一个特定的线程。相反,光纤可以在线程之间自由传递,只要它们当前未执行。”这没有错(现在),因为您仍然可以使用具有所有含义的共享(光纤),但它破坏了D类型系统,所以将来可能会被禁用。文档是这样写的,因为最初Walter希望支持它。然而,一些主要的现有商业D用户(Sociamantic和weka.io)非常反对它,并且强烈要求更改规范以永久禁止它。你不应该在线程之间移动光纤。如果你需要做这样的事情,那么也许你在处理你的任务时出错了。