2016-04-16 12 views
2

Ich frage mich, wie ich eine Faser an einen Thread übergeben?Wie übergibt man eine Faser an einen Thread?

Die einzige Möglichkeit, die ich geschafft habe, war es, zu und von shared zu werfen.

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

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

Aber das scheint nicht richtig. Ich denke, ich verstehe die Implikationen von shared nicht vollständig.

Ich musste die Faser zu teilen teilen, weil ich es nicht ohne es an den Thread senden konnte. Ich musste es zu einer Faser zurückwerfen, weil ich Fiber.call auf einer geteilten Faser nicht benennen konnte.

Was ist die korrekte Art, ein Fiber an ein Gewinde zu übergeben?

Antwort

3

Es gibt keine Unterstützung für die Bewegung von Fasern über Fäden, gerade jetzt (und wahrscheinlich wird es nie sein). Shared kann irgendwie funktionieren, aber es ist gefährlich, und ich bin mir nicht sicher, ob es mit allen Compilern in Ordnung ist. Einige weitere Informationen ist in diesem dlang Forum-Thread:

http://forum.dlang.org/post/[email protected]

+0

Ist die Dokumentation falsch? "Bitte beachten Sie, dass keine Faser an einen bestimmten Thread gebunden werden muss. Stattdessen können Fasern frei zwischen Threads übergeben werden, solange sie nicht gerade ausgeführt werden." –

+0

Es ist nicht falsch (gerade jetzt), weil Sie immer Shared (Fiber) mit allen Auswirkungen verwenden können, aber es bricht D-System, so ist es möglich, dass es in Zukunft nicht mehr erlaubt wird. – Kozzi11

+0

Die Dokumentation wurde so geschrieben, weil Walter sie ursprünglich unterstützen wollte. Einige große kommerzielle D-Nutzer (Sociomantic und weka.io) sind dagegen sehr dagegen und es gibt einen starken Druck, die Spezifikationen zu ändern, um sie für immer zu verbieten. –