2012-01-23 5 views
10

shared_ptrがアトミックなCPU命令を使用する理由を理解できていません...スレッドセーフではないため、理由を特定できません。 誰かが説明してください。なぜstd :: shared_ptrがアトミックなCPU操作を使用しているのですか

アトミックなintstuructionsを使用していることを私が知っていることが分かっていれば、C++のクリップがあり、HerbとAndreiがそれについて話しているところですが、

答えて

15

shared_ptrのインスタンスはマルチスレッドセーフです。それが指すデータは、マルチスレッドセーフではありません。 thisを参照してください。

適切に適用された場合のアトミック命令(競合スレッドアクセスによって同じ順序で行われる保護)は、スレッドの安全性を実装する1つの方法です。別の方法は、mutexの使用です。

BOOSTのための同様の質問を参照してください:Is boost shared_ptr xxx thread safe?

+6

を: 'shared_ptr'の中の共有参照カウントは、複数のスレッドによってアクセスされるかもしれません。そのため、それを原子的に増減する必要があります。 –

2

ハーブサッターちょうど彼のgotw 95で素敵な一例としてのshared_ptrを使用し、彼が設計上の決定について詳しく説明するためにそこに行く:具体的には
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 (そして私は仕事をするのが面倒です) – johnchen902