3

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

现在我想让这段代码在 Windows 和 Linux 中都可以执行;你能建议我一些线程实现来做到这一点吗?

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

预先感谢。

4

4 回答 4

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

最后,如果您正在寻找并行化算法,可能值得您查看英特尔的 TBB,这是一个现代 C++ 线程库,提供类似于 std:: 算法的并行结构

tbb::for_each(my_contaier.begin(), my_container.end(), my_func);

http://threadingbuildingblocks.org/

于 2012-04-20T14:07:31.517 回答
1

Boost.Thread

http://www.boost.org/libs/thread

于 2012-04-20T14:07:16.147 回答
1

boost::thread 也是新标准 C++11 中的 std::thread 解决方案。

于 2012-04-20T14:07:24.273 回答
1

作为替代方案,一个非常可移植 (*) 且相对非侵入性的库,在 g++ 上得到很好的支持,并且在 MSVC 上(使用旧版本)是OpenMP

它不是标准的 C++,但 OpenMP 本身就是一个标准。它让您可以轻松地并行化循环:

#pragma omp parallel for
for (int i=0; i!=x; ++i) {
}

它还具有任务和计时功能(以及更多),但在我看来,它的王道是上面的例子。


(*) 如果你坚持使用编译指示,它根本就不是不可移植的。

于 2012-04-20T14:30:27.107 回答