Я уже использовал следующий код для некоторого тестирования и не сталкивался с какими-либо проблемами, однако я только что понял, что код может быть не поточно-ориентированным и приводить к условиям гонки.
...
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);
...
Мой вопрос касается помеченной линии, так как я думаю, что при копировании конструкция общего указателя может происходить из-за увеличения ссылочного значения.
Хотя я мог бы просто избежать этого, захватив указатель по ссылке и используя его напрямую, но я все еще заинтересован в решении.