2012-11-30 48 views

回答

4

我認爲你誤解了共享指針的線程安全限制。共享指針本身不是線程安全的,因爲您不想在兩個不同的線程中操作相同的共享指針。但是,在同一時間在兩個不同的線程中操作同一個對象幾乎是不安全的,而且對於大多數對象來說線程不安全。

完全線程安全的操作兩個不同線程中的兩個不同的共享指針,即使它們是指向同一對象的指針。

例如,一個線程可以創建一個對象和一個指向它的共享指針。然後它可以創建另一個指向同一個對象的共享指針。然後一個線程可以操作第一個共享指針,另一個線程可以操作第二個共享指針。當兩個共享指針中的最後一個(以及任何附加副本)消失時,該對象將被破壞。

+0

採取在http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm#ThreadSafety從升壓文檔這個例子 //線程A P3 = P2; //讀取p2,寫入p3 //線程B // p2超出範圍:未定義,析構函數被認爲是「寫入訪問」 – Anthony

+0

實際上,您可能對我如何閱讀這個問題是正確的。 – Anthony

+0

在你引用的例子中,兩個線程正在訪問* same *共享指針,'p2'。是的,兩個線程不應該在沒有同步的情況下使用相同的共享指針,就像它們不應該使用相同的字符串或相同的映射一樣。但是,對於兩個線程來說,使用兩個不同的共享指針是完全正確的,即使它們都指向同一個對象。 –

相關問題