便携式C ++多线程

时间:2012-04-20 14:03:13

标签: c++ multithreading portability

我正在用C ++语言编写一个使用多线程的库。由于我在Windows中开发它,我正在使用“Windows.h”中的方法和数据结构(如CreateThreadHANDLE WINAPI等)。

现在我想在Windows和Linux中使这个代码可执行;你能告诉我一些线程实现吗?

这个应用程序的主要要求是执行速度,所以我需要一些快速的实现。

提前感谢。

4 个答案:

答案 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);

http://threadingbuildingblocks.org/

答案 1 :(得分:1)

答案 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,它根本就不可移植。

相关问题