[英]Are C++ smart pointers lockfree?
對於std::unique_ptr
和/或std::shared_ptr
,以下操作是否無鎖定?
read(*myPtr)
引用,即read(*myPtr)
或myPtr->getSomething()
std::move(myUniquePtr)
或std::shared_ptr
超出范圍。 就我而言,我不會同時從多個線程訪問這些指針。 我只是好奇我是否可以在高優先級,無鎖線程上專門使用它們。 由指針管理的對象在高優先級回調之前由主線程分配,並且在回調停止之前不會被釋放。
謝謝!
通過合理的實施,您可以假設:
std :: unique_ptr :
std :: shared_ptr :
std::atomic<std::size_t>
一樣無鎖(可以使用成員函數is_lock_free
進行檢查)。 標准所說的就是shared_ptr<>
(20.7.2.2/4“類模板shared_ptr”):
use_count()
更改不反映可能引入數據use_count()
修改
它沒有說use_count()
中的那些更改必須是無鎖的。 該標准允許使用互斥鎖來防止數據競爭。
unique_ptr<>
沒有承諾阻止數據爭用(它本身並不打算是線程安全的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.