pthreads を使用して自分の目的に合ったカスタマイズされたスレッドプールを作成しようとしていますが、pthreads は初めてです。私はこれらの ( POSIX スレッド プログラミングおよびLinux チュートリアル Posix スレッド) チュートリアルをオンラインで読みましたが、非常に役に立ちましたが、mutex と条件変数に関して (おそらくばかげた) 疑問がいくつかあります。
- ミューテックスのスコープは何ですか? 一度に 1 つのスレッドだけがアクセスできるように、グローバルミューテックスはすべてのグローバル変数をロックしますか? 2 つのグローバル ミューテックスがある場合、それらは同じ変数セットをロックしますか? クラスまたは関数内で宣言されたミューテックスはどうなりますか? ロック/ロック解除するとどうなりますか?
- グローバル変数を読み取るだけで、まったく変更しない場合でも、mutex ロックを使用する必要がありますか?
- 私が正しければ、条件変数を使用して
pthread_cond_wait()
、何らかの条件でスリープしている (または を使用してブロックされている) 他のスレッドをウェイクアップします。スリープ状態のスレッドへのウェイクアップ コールは、他のスレッドによって、pthread_cond_signal()
またはpthread_cond_broadcast()
他のスレッドから与えられます。すべてまたは 1 つのスレッドがウェイクアップして作業を行い、次の作業が利用可能になるまで待機するように、制御の流れはどのように発生するはずですか? 4 つのスレッドを使用するシナリオに特に関心があります。 - スレッドを作成する前に、スレッドのアフィニティを特定のプロセッサ コアに設定する方法はありますか (目的のコアで実行を開始し、作成後にコアの移動が発生しないようにするため)。
質問がばかげているように見える場合は申し訳ありませんが、私が言ったように、私はこれに慣れていません。ヘルプ、コメント、コード、または適切なリソースへのポインターを歓迎します。よろしくお願いします。