目前正确的方式在Linux中进行线程编程

我知道Linux内核和libc中线程的实现在过去发生了很大的变化。 从C程序中使用线程的最好方法是什么? (我甚至不知道是否有多个API可以使用 – 我只知道pthread)

我不太关心旧内核和libc版本,但是我关心如何有效地使用多核心和可移植性(我可能希望我的代码也可以在其他Unix上工作)。

如果我只是使用在man 7 pthreads描述的posix线程,并将我的代码限制在POSIX API中,那可以吗?

编辑 :感谢所有谁回答。 我曾经想过使用一些可用的线程池库,但是对于这个项目来说,这不是一个选项。

多半是对的。 这是POSIX的重点。 您计划移植的每个平台(包括操作系统,内核编号和体系结构)可能有一些差异,您需要注意。 这是你的作业:)

另外,作为一个建议,像Qt这样的框架和像Boost这样的库包使得这些工作更加优雅。 如果你可以整合他们,我强烈推荐它。

POSIX线程是一个不错的选择和流行的线程。 在使用C / C ++进行编程时,您可能还需要查看Boost线程和英特尔线程构建模块的其他选项,而不是直接编码到POSIX API。 具体而言,英特尔TBB声称以易于使用和高效的方式使用多核处理器。 我没有太多的TBB经验,但是我看过使用TBB的演示,使用TBB可以大幅度缩减代码大小和复杂性,并且比使用由经验丰富的工程师编写的POSIX线程编写的直接C ++实现快得多。

使用线程很困难且容易出错。 尽可能避免直接编程。 关于这个问题的文章可以在这里找到。

除了直接使用线程之外,可以通过各种不同的方式来实现多核并行。 最直接的是多进程并行。 对于n个核心,运行n个进程并细分其中的工作量。 当任务粗糙且需要很少或根本不需要通信时,这是最合适的。 当它必须在进程中时,可以使用消息传递来进行线程之间的所有通信和同步,并尝试总是将不可变对象作为消息传递。