tbb::enumerable_thread_specific
дает локальное хранилище потока, когда оно используется в параллельных блоках tbb. Например,
tbb::enumerable_thread_specific<int> tls(0);
tbb::parallel_for(0, n, [&] (int i) {
tls.local() += i;
});
std::accumulate(tls.begin(), tls.end(), 0);
В лямбда-функции tls.local () не будет использоваться другими потоками в одно и то же время. Когда мы накапливаем значения в tls
, он должен давать сумму целых чисел от 0 до (n-1). Будет ли это свойство храниться, когда оно используется в другой библиотеке потоков, такой как openmp, pthread? Например,
tbb::enumerable_thread_specific<int> tls(0);
#pragma omp parallel for
for (int i = 0; i < n; i++) {
tls.local() += i;
}
std::accumulate(tls.begin(), tls.end(), 0);
Приведет ли приведенный выше код к непредсказуемому результату?