8

複数のスレッドから同時に安全にアクセスできるように、多数のデータ クラスのゲッターとセッターへのアクセスを制御したいと考えています。以前に Java で java.util.concurrent.locks.ReentrantReadWriteLock を使用してこれを行ったことがありますが、非常に簡単でした。

しかし、再入可能な読み取り/書き込みロックの実装が見つからないため、現在の C++ プロジェクトで多くの問題が発生しています。具体的には、スレッドが既に書き込みロックを持っている場合、ブロックせず、最初に書き込みロックを放棄することなく、スレッドが読み取りロックを取得できるようにする必要があります。

理由は簡単です。いくつかのセッター メソッドはゲッター メソッドを呼び出し、前者は (通常) 書き込みロックを取得し、後者は読み取りロックを取得します。ロック クラスの制限を回避するためだけに、単純な getter/setter アーキテクチャをゆがめたくはありません。

Qt (4.8) QReadWriteLock と関連クラス、Boost の unique_lock と shared_lock を試しました。どちらのライブラリも、私が必要とする再入可能性を実装していません。ブーストの他の部分はこれに対処していますか?

または、これを持っている他のライブラリがありますか?QtもBoostも明らかに望ましい機能のように見えるので、私は本当に驚いています。(そして、2004 年から Java 標準ライブラリの一部になっています。)

4

1 に答える 1

4

C++ のマルチトレッドに手を出した人として、広く配布されているライブラリでこの機能を見つけることができるかどうかはわかりません。私の知る限り、boost スレッド、std スレッド、および POSIX スレッドではこれが許可されていません。

その結果、問題を解決するために、次のことをお勧めします。

  1. ロック方式と共有しているデータをもう一度見てください。やろうとしていることを達成できる別の方法はありますか?

  2. 求めるロック プリミティブの独自のバージョンを実装してみてください。これは、選択したライブラリですでに利用可能なプリミティブの比較的単純な拡張にすぎません。また、この問題を抱えているのはあなただけではないと確信しているので、コミュニティと共有してください.

于 2013-06-27T00:33:40.663 に答える