PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] shared_ptr 是否 atomic or thread safe
作者:
lovejomi
(JOMI)
2019-07-12 11:06:48
這問題一直是讓我很難理解
我看了 cppreference, 他提到 你只要用了non-const method的話就不thread safe
問題出在
https://en.cppreference.com/w/cpp/memory/shared_ptr/operator%3D
這不是non-const , 而我看到的程式碼(也許早就寫錯了)
我並沒有看到mutex or 一些保護機制去保護shared_ptr assignment
假設一個情況
Thread1
mSp = nullptr; 內部應該是refcount
作者:
steve1012
(steve)
2019-07-12 12:20:00
連結沒看到程式碼
作者:
sifmelcara
(sifmelcara)
2019-07-12 13:56:00
不同thread操作同一個instance才會沒有thread safetyrefcount要atomic的目的就是讓不同thread使用指向同個地方的shared_ptr的操作是thread safe的
作者:
eye5002003
(下一夜)
2019-07-12 18:42:00
atomic比較便宜,C++就是這麼節儉
作者:
Caesar08
(Caesar)
2019-07-12 19:10:00
所以也有提供
https://tinyurl.com/y5up2jcs
但是因為使用者常常不知道什麼時候該用atomic所以後來就直接提供
https://tinyurl.com/yy33lelq
作者:
developers
(rejuvenate)
2019-07-14 11:42:00
目前版本的shared_ptr和weak_ptr只有保證increment和decrement ref count是atomic的,還有resource只會被delete一次,但都不保證存取resource 是atomic。C++20 有atomic_shared_ptr和atomic_weakk_ptr會解決這個問題shared_ptr assignment threadsafe 的寫法 用c++17是atomic_store(&ptr, localPtr)來代表 ptr = localPtr後者的結果是undefined behavior 因為有data race
繼續閱讀
Re: [問題] zj e295. IO 優化
suhorng
Re: [問題] zj e295. IO 優化
firejox
[問題] zj e295. IO 優化
nevikw39
[問題] 範例程式碼無法執行
BASICA
[問題] 關於opencv 輸出的錄影檔
asdfg1597860
[問題] 透過system() 刪除檔案
jayzhuang
[問題] x64 環境下的行程虛擬記憶體位置
flypaper
[問題] id returned 1 exit status
triumphant10
[問題] 請教關於時間複雜度的分析問題
ac01965159
[問題] the C++ programming language裡面的問題
saladim
Links
booklink
Contact Us: admin [ a t ] ucptt.com