4

Haskellでは、forkIOはバインドされていない(Haskell)スレッドを作成し、forkOSはバインドされた(ネイティブ)スレッドを作成します。Haskellスレッドが同じOSスレッドに留まることが保証されていないことをここで述べた前の質問に対する答えは、 Control.Concurrentモジュールのドキュメントでサポートされているようです。私の質問は、実行中のHaskellスレッドが別のOSスレッドにスワップされた場合、そのThreadIDは同じままですか?

4

1 に答える 1

8

はい。

AThreadIdは、スレッドへのハンドルを表す抽象型です。

これは、非同期シグナルを特定のスレッドに送信する方法ですThreadId。どのOSスレッドが関係しているかは関係ありません。また、ターゲットスレッドがOSスレッドにまったくバインドされていない(たとえば、スリープしている)可能性が非常に高くなります。

「OSスレッド」の存在は、実装の詳細ですが、特定のライブラリでFFIを使用する場合は、それらを管理する必要があります。それ以外の場合は、コード内のOSスレッドをほとんど無視できます。

于 2012-07-17T03:54:52.030 に答える