我正在用C ++语言编写一个使用多线程的库。由于我在Windows中开发它,我正在使用“Windows.h”中的方法和数据结构(如CreateThread
,HANDLE WINAPI
等)。
现在我想在Windows和Linux中使这个代码可执行;你能告诉我一些线程实现吗?
这个应用程序的主要要求是执行速度,所以我需要一些快速的实现。
提前感谢。
答案 0 :(得分:11)
到目前为止,您最好的选择是使用新的std :: threads库,这是可移植的,标准化的,并以现代风格编写。
std::thread my_thread(my_func, my_param);
http://en.cppreference.com/w/cpp/thread
如果您无法访问C ++ 11(VC10和> gcc 4.4应该没问题),那么std :: threads或多或少是一个伟大的boost :: threads,boost库的开发是跨平台和可移植的(至少它将支持主要的操作系统包括Win32和Linux)。
http://www.boost.org/doc/libs/1_49_0/doc/html/thread.html
最后,如果你正在寻找并行算法,那么在检查intel的TBB时可能是值得的,这是一个现代的C ++线程库,提供类似于std :: algorithms的并行结构
tbb::for_each(my_contaier.begin(), my_container.end(), my_func);
答案 1 :(得分:1)
Boost.Thread
答案 2 :(得分:1)
boost :: thread是新标准C ++ 11中的解决方案std :: thread。
答案 3 :(得分:1)
作为替代方案,在MSVC上g ++和(旧版本)支持的非常便携(*)且相对非侵入性的库是OpenMP。
它不是标准的C ++,但OpenMP本身就是一个标准。它让你轻松地平行循环:
#pragma omp parallel for
for (int i=0; i!=x; ++i) {
}
它还有任务和计时功能(以及更多),但在我看来,它的主要原则是上面的例子并行。
(*)如果你坚持使用pragma,它根本就不可移植。