スレッドAで作成されたファイバを、スレッドBで作成された別のファイバに切り替えることはできますか?問題をより具体的にするために、いくつかのオペレーティングシステムでは、ネイティブにファイバーが実装されています(windows fibers)、
(Linuxなどでsetjump longjumpを使用して)独自に実装する必要があります。例えば繊維は糸間を移動できますか?
Libcoroは、(窓のためには、Linux用のそれなど自体を実装し、ネイティブファイバ用の単なるラッパーです)、単一のAPIでこのすべてを包み込む
だから、それはスレッド間の繊維を移行することができます場合は、 c/C++でwindows(linux)の使用例を教えていただけますか?
ブーストライブラリdocumentationでファイバーマイグレーションについて知りましたが、その実装とプラットフォームの依存性については具体的ではありません。私はまだWindowsファイバーのみを使って自分自身でやる方法(あるいはLinuxのLibcoroを使う方法)を理解したいと思っています。
一般的な方法ではできない場合は、、なぜですか?
私は、繊維は、単一のスレッド上で協調的マルチタスクのためにlightweight threadsとして使用されることを意図している、彼らは通常の糸に比べて安価なコンテキストの切り替えを持っている、と彼らはプログラミングを簡素化することを理解しています。 例としては、いくつかのスレッドがあり、それぞれが親スレッド上で何らかの種類の作業階層を実行している(親スレッドを離れることはありません)。
意図した用途ではありませんが、一般的なやり方で可能な場合でもそれを実行する方法を学びたいと思っています。スレッド間でファイバを移行することで仕事システムの作業負荷を最適化できると思うからです。
少なくともWindowsファイバの場合、答えは「はい」です。 [SwitchToFiber'のドキュメント(https://msdn.microsoft.com/en-us/library/windows/desktop/ms686350.aspx)から: "SwitchToFiberを、あなたが作成したファイバーのアドレスで呼び出すことができます別のスレッド。 –
「ファイバー」は大まかに定義された用語なので、一般的な答えはないと思います。基本的に、ファイバはスレッドから実行状態を取得します。それゆえ、疑問はそれが完全な状態を捕らえるかどうかです。 – MSalters