我现在一直在使用以下代码进行相当多的测试并且没有遇到任何问题,但是我刚刚意识到代码可能不是线程安全的并导致竞争条件。
...
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);
...
我的问题是关于标记线的,因为我认为在共享指针的复制构造过程中,由于引用计数的增加可能会发生竞争条件。
虽然我可以通过引用捕获指针并直接使用它来避免这种情况,但我仍然对解决方案感兴趣。