2

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

我设法做到这一点的唯一方法是从shared.

auto fiber = new Fiber((){
});
auto t = spawn((){
    auto fib = cast(Fiber)receiveOnly!(shared(Fiber));
    writeln("fib");
    fib.call();

});
send(t, cast(shared(Fiber))fiber);

但这似乎不对。我想我不完全理解shared.

我不得不将纤维投射到共享,因为没有它我不允许将它发送到线程。我不得不将它转换回光纤,因为我无法调用Fiber.call共享光纤。

Fiber将 a 传递给线程的正确方法是什么?

4

1 回答 1

3

目前不支持跨线程移动光纤(可能永远不会)。使用 shared 可以以某种方式工作,但它很危险,我不确定它是否适用于所有编译器。更多信息在这个 dlang 论坛帖子中:

http://forum.dlang.org/post/m2r3prh3ki.fsf@comcast.net

于 2016-04-16T12:20:14.530 回答