この 1 つのオブジェクトにアクセスする 2 つのスレッドがあります。
スレッド A: ブーストhared_ptrメンバーを更新します スレッドB: ブーストshared_ptrメンバーを読み取ります
shared_ptr は整数/実数ポインター型ではないため、スレッド B によってアトミックに読み取ることはできません。
ロックは避けたい。
スレッド B が有効な shared_ptr を取得することをどのように保証できますか?
ありがとう!
この 1 つのオブジェクトにアクセスする 2 つのスレッドがあります。
スレッド A: ブーストhared_ptrメンバーを更新します スレッドB: ブーストshared_ptrメンバーを読み取ります
shared_ptr は整数/実数ポインター型ではないため、スレッド B によってアトミックに読み取ることはできません。
ロックは避けたい。
スレッド B が有効な shared_ptr を取得することをどのように保証できますか?
ありがとう!
仮に普通の型だったとしても、アーキテクチャによっては現実世界でアトミックに読み込みが行われる保証はありません。
また、スレッド B が長時間停止し、それ以降 A が削除した可能性のある古いオブジェクトへのポインタがまだ残っている場合も考えてみましょう。その場合、A が古いポインターを削除するのを防ぐために RCU を使用することを検討することをお勧めします。しかし、それはまた、より多くのコードとより見つけにくいバグを意味します
ロックを使用するだけです。追加のオーバーヘッドにより、非同期が機能しない理由を理解する必要がなくなります。本当にロックを回避したい場合は、共有変数の使用を避けてください。