簡體   English   中英

共享指針和多線程

[英]shared pointers and multithreading

我一直在使用以下代碼進行相當多的測試,並且還沒有遇到任何問題,但是我只是意識到代碼可能不是線程安全的,並且會導致競爭條件。

...
std::shared_ptr<T> ptr(new T(bar));

auto foo = [=] (tbb::blocked_range<int> r) {
     std::shared_ptr<T> p(ptr); // <- Is this threadsafe?
     // ... do stuff
};

tbb::parallel_for(tbb::blocked_range<int>(0,x), foo);
...

我的問題是關於標記行的,因為我認為在共享指針的副本構建過程中,競爭引用可能會由於增加引用計數而發生。

盡管通過引用捕獲指針並直接使用它可以避免這種情況,但是我仍然對該解決方案感興趣。

不,如果編譯時啟用了多線程選項,則該庫應使用原子操作或鎖作為共享指針的引用計數。 您發布的代碼沒有線程安全問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM