C++中的跨平台多线程?

3

基本上,标题已经解释了一切;我想用C++制作一个游戏,并且希望使用多线程来处理物理引擎和在加载屏幕上保持动画流畅等任务。我看到了一些多线程库,但我想知道哪个最适合我的应用程序,在Windows Mac和Linux上都能很好地工作。是否存在这样的库?

5个回答

6

你可能需要使用boost::thread或者英特尔的Thread Building Blocks。我会推荐TBB,但是我认为它不是免费的,所以选择免费的选项使用boost::thread


免费是需求列表中非常重要的一项 :-P 感谢 Boost 推荐。我之前在各个地方都看到过它,但从未知道它对于多线程很有用 - 谢谢! - Bojangles
英特尔的TBB是免费的,事实上:可在GPL下使用。请参见http://threadingbuildingblocks.org。 - Alexey Kukanov

3

如果您能使用c++0x threads,那么请使用。

如果不能,boost::thread是最好的免费多平台库。


谢谢。C++0x是否跨平台?抱歉问个新手问题,但我在网上找不到答案。 - Bojangles
@JamWaffles 是的,但这实际上取决于编译器是否支持。c++0x仍未标准化。 - BЈовић
啊,好的。我已经看了一些资料,看起来还不错,只是有点令人困惑。我认为boost是正确的选择,但是对于这个好的替代方案我给一个赞 - 希望它能被纳入C++标准。 - Bojangles
@JamWaffles C++0x是新的标准。它很可能在今年完成定稿。 - Joseph Mansfield
委员会于3月25日(几周前)投票将C++0x提交FDIS。技术工作已经完成,现在只需要ISO的批准即可成为C++11。 - Howard Hinnant
一个更近期的跨平台解决方案可能是https://www.khronos.org/sycl/。 - ferdymercury

2

我最喜欢的是QThread。它是Qt库的一部分。


1
谢谢你的推荐。虽然Boost类似,但我不太喜欢仅仅为了多线程而使用整个框架,但当我开始在Qt中编写应用程序时,这将会很有用。 - Bojangles
不,Boost并不相似。Boost不是一个框架,而是一个松散的库和工具集合。如果你只需要多线程,甚至可以仅提取boost/thread库并包含/链接它。 - Mephane

1

目前我的建议是使用OpenMP(g++上的libgomp,IBM XlC++,MSVC++都支持它)。

OpenMP提供了一种简单的利用并行性而不干扰算法设计的方式;一个OpenMP程序在并行和串行执行环境中都能正确编译和运行。使用OpenMP的指令式并行性还简化了将现有串行代码转换为高效并行代码的过程。

请参考msdnGOMP作为起点。

随机引用:

为了保持相关性,自由软件开发工具必须支持新兴技术。通过实现OpenMP,GOMP为创建针对并行架构的软件提供了简化的语法工具。OpenMP的平台中立语法与GCC和其他GNU项目的可移植性目标相契合。


1

另一个包含跨平台线程的不错库是poco


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接