8

ゴルーチンが特定の OS スレッドでのみ実行されるようにする方法はありますか? たとえば、GUI 操作を GUI スレッドで実行する必要があるが、GUI コードを実行するゴルーチンが複数ある場合などです。

GOMAXPROCS(1)技術的には仕事をしますが、それはマルチスレッドの目的を無効にします。

LockOSThread()も機能しますが、そのスレッドで他のゴルーチンも実行できなくなります。

これを行う方法はありますか、または同じスレッドを必要とするすべてのものも同じゴルーチンで実行する必要がありますか?

4

2 に答える 2

8

私の知る限りでは、現在ではありません。これを行うための 'go-like' 方法は、GUI スレッドで実行され、チャネルを介して送信された他のゴルーチンからのサービス要求を処理するゴルーチンを作成することだと思います。たとえば、関数ポインターを受け入れるチャネルから読み取り、それらの関数を実行することができます。

于 2009-12-10T12:19:42.213 に答える
3

なぜあなたはこれをしたいのですか?runtime.LockOSThread()スレッドローカルストレージを使用するCコードからライブラリバインディングを作成する場合に必要だと思います。それ以外の場合は、スケジューラーにゴルーチンを多重化させてください。

runtime.LockOSThread()また、を呼び出すまで、他のgoroutineがそのスレッドで実行されないようにするだけであることに注意してくださいruntime.UnlockOSThread()

于 2009-12-18T14:47:48.093 に答える