我有一個問題,理解爲什麼shared_ptr使用原子CPU指令......我無法弄清原因,因爲它不是線程安全的。 有人可以請解釋。爲什麼std :: shared_ptr使用原子CPU操作
如果你想知道我是如何知道它使用原子intstuructions:有一個來自C++和超過Herb和安德烈談論它的剪輯,但他們從來沒有提到它是這樣的原因。
我有一個問題,理解爲什麼shared_ptr使用原子CPU指令......我無法弄清原因,因爲它不是線程安全的。 有人可以請解釋。爲什麼std :: shared_ptr使用原子CPU操作
如果你想知道我是如何知道它使用原子intstuructions:有一個來自C++和超過Herb和安德烈談論它的剪輯,但他們從來沒有提到它是這樣的原因。
shared_ptr
的任何實例都是多線程安全的。它指向的數據不是多線程安全的。見this。
原子指令如果正確應用(通過競爭線程訪問以相同順序完成保護)是實現線程安全的一種方法。另一種方法是使用互斥鎖。
見BOOST一個類似的問題:Is boost shared_ptr xxx thread safe?
香草薩特剛剛使用的shared_ptr在他gotw 95一個很好的例子,他去那裏闡述設計決策:
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/
雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 (而且我懶得做這份工作) – johnchen902
更具體: 'shared_ptr'內的共享引用計數可以被多個線程訪問。這就是爲什麼有必要自動增加/減少它。 –