tbb :: parallel_ for始终使用调用线程
Does tbb::parallel_for always utilize the calling thread
我有一个代码,其中我使用 tbb::parallel_for
来多线程循环,这是由主线程调用的。在该循环中,我需要主线程来更新UI以反映进度。从我观察到的内容来看,tbb::parallel_for
总是使用呼叫者线程 N工作线。但是,我想知道,是否保证了通话线程的使用情况或只是恰好是这种情况?
这是示例代码:
static thread_local bool _mainThread = false; // false in all threads
_mainThread = true; // now true in main thread, but false in others
tbb::parallel_for(start, end, *this);
void Bender::processor::operator()(size_t i) const
{
...
if(_mainThread) // only main thread will issue events
ProgressUpdatedEvent(progress);
}
谢谢!
严格来说,我认为TBB没有任何给定线程应运行的东西的保证(TBB的基本原理是可选的并行性和随机的工作偷窃(。TBB中的任务亲和力甚至是"软",因为不能保证特定的工人可以执行封闭式任务。
实际上,实现parallel_for的方式意味着它将在切换到其他任务并退出Parallel_for之前至少运行一个任务。因此,至少对于简单的情况,预计它的工作正常。
相关文章:
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 非静态成员失败的线程调用函数
- 线程调用的函数对对象删除是否安全?
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 通过 Qt 中的线程调用 Rust 库
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 由并发无序映射查找线程调用的函数是否安全?
- 如何从另一个线程调用颤振引擎方法
- C++ std::线程调用方法,从对象原因到调用此类的析构函数
- 从多个线程调用 std::shuffle
- std::thread::join() 可以从非父线程调用吗?
- 如何使用 Win32 API 从 Excel VBA 中的非"Single-Threaded Apartment"线程调用 InternetGetProxyInfo
- 带参数的线程调用库函数
- 如何在本机C++中跨线程调用(在主线程上回调)
- 如果两个线程调用同一个函数,但函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- 优雅断言函数不是从多个线程调用的
- 从第二个线程调用Qt信号有效 - >对连接的插槽没有影响
- 包装标准::线程调用函数
- 从 Visual C++ 2010 中的单独线程调用消息框