1

通常、単一のスレッドで行うように、スレッドグループを保護するための適切なソリューションを探しています。つまり、スレッド 1 と 2 のいずれかまたは両方が同時にミューテックス M をロックでき、1 も 2 もスリープ状態になりません。Mutex M はスレッド 3 に対抗します。したがって、スレッド 1 または 2 またはその両方によってロックされている間にスレッド 3 が mutex をロックすると、スレッド 3 はスリープ状態になります。スレッド 1 または 2 がスレッド 3 によってロックされている間にミューテックスをロックすると、1 または 2 (ロックされている方) も 3 が解放するまでスリープ状態になります...

ありがとうございました。

4

2 に答える 2

0

それでも、私は提案されたposixセマフォを読んでいます(これは私が望んでいるように思えます)「古い方法」でそれを行う方法を見つけました:Stevens UNP p。703、pthread_cond を使用すると、メタコードは次のようになります。

int var = 0;
pthread_mutex_t M;
pthread_cond_t C;

threadA:      lock M; var++; unlock M; do_job; lock M; var--; cond_signal(&C); unlock M
threadB:      lock M; var++; unlock M; do_job; lock M; var--; cond_signal(&C); unlock M

thread Main:  lock M; while (var > 0) cond_wait(&C, &M); do_protected_job; unlock M

おそらく、セマフォはそれほど面倒でない方法で同じことを可能にします、私はチェックします...

于 2013-08-28T18:02:01.123 に答える
0

クリティカル セクションに 2 つ以上のスレッドを入れたくないが、3 番目のスレッドはクリティカル セクションに入れないようにする場合は、2 に初期化された POSiX セマフォを使用する必要があります。セマフォ カウンタは任意の値に初期化できます。カウンター (ロックする) 、すべての sem_post がインクリメントする (解放する) 。ミューテックスは、1 に初期化されたセマフォの特殊なケースです。

あるいは、1 つの書き込みスレッドと 2 つ以上の読み取りスレッドが必要な場合は、rwlocks を使用できます。

于 2013-08-28T17:10:08.147 に答える