我正在用 C++ 语言编写一个使用多线程的库。由于我是在 Windows 中开发它,所以我使用“Windows.h”中的方法和数据结构(如CreateThread
、HANDLE WINAPI
等)。
现在我想让这段代码在 Windows 和 Linux 中都可以执行;你能建议我一些线程实现来做到这一点吗?
这个应用程序的主要要求是执行速度,所以我需要一些快速的实现。
预先感谢。
我正在用 C++ 语言编写一个使用多线程的库。由于我是在 Windows 中开发它,所以我使用“Windows.h”中的方法和数据结构(如CreateThread
、HANDLE WINAPI
等)。
现在我想让这段代码在 Windows 和 Linux 中都可以执行;你能建议我一些线程实现来做到这一点吗?
这个应用程序的主要要求是执行速度,所以我需要一些快速的实现。
预先感谢。
到目前为止,您最好的选择是使用新的 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);
Boost.Thread
boost::thread 也是新标准 C++11 中的 std::thread 解决方案。
作为替代方案,一个非常可移植 (*) 且相对非侵入性的库,在 g++ 上得到很好的支持,并且在 MSVC 上(使用旧版本)是OpenMP。
它不是标准的 C++,但 OpenMP 本身就是一个标准。它让您可以轻松地并行化循环:
#pragma omp parallel for
for (int i=0; i!=x; ++i) {
}
它还具有任务和计时功能(以及更多),但在我看来,它的王道是上面的例子。
(*) 如果你坚持使用编译指示,它根本就不是不可移植的。