pthread 関数pthread_rwlock_wrlockの動作に関して問題があります。上記のリンクの仕様では、1 つのスレッドが書き込み用にロックをロックし、同じスレッドが再びロックすると、未定義の動作が発生することが示されています (x86 Linux ではこの関数を呼び出すことはヌープであり、PowerPC Linux ではスレッドを停止します)。
私が必要とする動作は、次の特性を持つ読み取り書き込みロックです。
- スレッドによる読み取りロックは、次の場合に成功します。
- ロックはどのスレッドにも保持されていません
- ロックは、0 個以上のスレッド (呼び出しスレッドを含む) によってのみ読み取りロックされ、呼び出しスレッドによって読み取りまたは書き込みロックされる可能性があります。
- 書き込みロックは、次の場合に成功します。
- ロックは他のスレッドによって保持されていません
- 現在のスレッドのみがロックを保持しています (読み取りまたは書き込み用)。
ではpthread_mutex_t
、ロックの再帰性は初期化フラグを介して制御できますが、これは では不可能ですpthread_rwlock_t
。
私のオプションは何ですか?この種の同時実行プリミティブを実際に C で実装する必要があったことはありません。また、明らかな解決策が欠けていると思います。