あなたはマルチスレッドLinuxアプリケーションにミューテックスを使用する方法を理解するために私を助けてもらえ:それをデータ書き込み時のミューテックス
- は、書き込み時に変数をロックし、データ読み出し時に
- を読む必要がありますそれを書き込み時にロックする必要がある変数から。
同時に読み込むことはできますが、書き込み操作は同時に1つの操作です。書込み中は、他のすべての操作は完了するまで待つ必要があります。
あなたはマルチスレッドLinuxアプリケーションにミューテックスを使用する方法を理解するために私を助けてもらえ:それをデータ書き込み時のミューテックス
同時に読み込むことはできますが、書き込み操作は同時に1つの操作です。書込み中は、他のすべての操作は完了するまで待つ必要があります。
あなたはmutexよりも少し高いレベルのものを求めています。ミューテックスはシンプルで低レベルのデバイスです。ミューテックスを持つスレッドをロックすると、CPUはロックを取得したスレッド内のコードを実行しているか、または他のいくつかのプロセスを完全に実行しています。言い換えれば、ミューテックスは同じ(ヘビー級)プロセスに属する他のすべてのスレッドをロックアウトしています。
読み書きロックについて質問しています。読み書きロックは、フードの下にあるmutexを使用します。読み書きロックを扱うPOSIX関数は、pthread_rwlock_
で始まります。 Linuxマシンを使用しているので、man pthread
と入力し、「READ/WRITE LOCK ROUTINES」と記されているセクションを探してください。
グローバルまたは静的オブジェクトが異なるスレッドからアクセス(読み書き)されている場合は、ミューテックスを使用する必要があります。
複数のリーダー/単一のライターを許可するには、リーダー/ライターのロックが必要です。
他の優先スレッドライブラリがない場合、Boost.Threadはこれらのうちの1つ(boost::shared_mutex)を持っています。これは、カバーの下にあるPThreadsプリミティブを使用するので、生のAPIを自分でラップする時間を節約するでしょう。
動作するように見えるものは簡単ですが、負荷がかかっているとクラッシュするか、パフォーマンスが低下するか(最悪の場合)、サイレントにしてはいけない方法でデータが変更されるため、悪い結果を得る。
@Alsに記載されているように単純なboost::mutexをここでも使用できますが、複数の同時読み取りは許可されません。これは実装が簡単で、読み取り/書き込みアクセスプロファイルに応じて、必要に応じて十分です。