問題タブ [rwlock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
locking - pthread_rwlock_wrlock を再帰的にする
pthread 関数pthread_rwlock_wrlockの動作に関して問題があります。上記のリンクの仕様では、1 つのスレッドが書き込み用にロックをロックし、同じスレッドが再びロックすると、未定義の動作が発生することが示されています (x86 Linux ではこの関数を呼び出すことはヌープであり、PowerPC Linux ではスレッドを停止します)。
私が必要とする動作は、次の特性を持つ読み取り書き込みロックです。
- スレッドによる読み取りロックは、次の場合に成功します。
- ロックはどのスレッドにも保持されていません
- ロックは、0 個以上のスレッド (呼び出しスレッドを含む) によってのみ読み取りロックされ、呼び出しスレッドによって読み取りまたは書き込みロックされる可能性があります。
- 書き込みロックは、次の場合に成功します。
- ロックは他のスレッドによって保持されていません
- 現在のスレッドのみがロックを保持しています (読み取りまたは書き込み用)。
ではpthread_mutex_t
、ロックの再帰性は初期化フラグを介して制御できますが、これは では不可能ですpthread_rwlock_t
。
私のオプションは何ですか?この種の同時実行プリミティブを実際に C で実装する必要があったことはありません。また、明らかな解決策が欠けていると思います。
macos - Mac OS X/Darwinでの再帰的なpthread_rwlock_rdlock
スレッドで実行する次のサンプルコード(以下のコードを参照)があります。
基本的に、読み取りロックは再帰的です。POSIX標準で必要です(読み取りロックは再帰的である必要がありますが、書き込みロックには指定されていません)。これはLinux、FreeBSD、Solarisで機能しますが、Darwin / MacOSXでは機能しません。
以下のサンプルは、Linuxで次の出力を提供します。
ダーウィンにいる間、それは印刷します:
そして、ここでのデッドロック(継続しません)、基本的には再帰的な読み取りロックを尊重しません。
期待どおりに機能する可能性のあること(フラグ、定義、特別なライブラリバージョンとのリンク)はありますか?
サンプルコード
locking - FreeBSD でプロセス間 rwlock を作成するにはどうすればよいですか?
FreeBSD でプロセス間読み書きロックを作成する方法は何ですか? Linuxで正常に機能する「pthread_rwlockattr_setpshared」とPTHREAD_PROCESS_SHAREDフラグによってプロセス間で共有されるように設定できるpthreadのrwlockのようなものを探しています。しかし、FreeBSD はこのフラグをサポートしていません。前もって感謝します。
boost - boost shared_mutex、unique_lock、shared_lock を使用した RWLock
RWLock インターフェイスを実装しようとしています
boost::shared_mutex
、boost::unique_lock
およびを使用してboost::shared_lock
。
私が抱えている問題は、boost::shared_lock
/boost::unique_lock
が RAII を使用しており、スレッドごとに 1 つのインスタンスである必要があることです (必要に応じて共有されません)。必要に応じて、取得と解放を 2 つの別々のアクションで分割することができませんでした。
これは何とか解決できますか?
linux-kernel - rwlock_t を初期化する方法
Linux カーネル モジュールを作成していますが、読み書きロックを初期化する方法が見つかりません。私は静的な初期化を好みます。
RW_LOCK_UNLOCKED を使用しようとすると、コンパイラはそれが定義されていないと通知します。
multithreading - pthread rwlock 異なるスレッドからのロック/ロック解除
ドキュメントによると、スレッドからロックし、別の rwlock からロック解除すると、未定義の動作が発生します。配列と2つのスレッドがあり、1つは割り当て、もう1つは割り当て解除します。これはサイクルで発生し、読み取り/書き込みを行うスレッドもいくつかありますが、重複することはないため、同期は必要ありません。問題は、読み取り/書き込みスレッドが、dealloc - alloc の間の時間枠で配列を使用しようとすることです。読み取り/書き込みスレッドに読み取りロックを使用し、配列をロックして解放スレッドに書き込み、割り当てスレッドで書き込みをロック解除することを考えていました。しかし、これは異なるスレッドで発生するため、未定義の動作になります。この場合、どのようなアプローチが適切でしょうか?
c++ - 次のエラーが表示されます: エラー c2064: 用語が 0 引数を取る関数に評価されませんが、その理由がわかりません
このエラーが発生しています: エラー c2064: 用語は、0 引数を取る関数に評価されません。問題は、関数が 0 個の引数を取り、0 個の引数を呼び出していることです。何が問題なのかわかりません。
それが関数の呼び出しです。そして、これは関数です:
誰かが問題が何であるか知っていますか? 前もって感謝します!
go - Golang で優先する RW ミューテックス ロックを読む
golang でRW ミューテックスを優先する読み取りが必要です。私のニーズを満たすgolangのパッケージはありますか?sync.RWMutex を試してみましたが、ロック優先の書き込みのようです。Go の RWMutex を区別するための私の試みは次のとおりです。
出力:
2 番目のリーダーは、ライターがロックを解除するまで待機します。