繁体   English   中英

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

[英]Current right way to do thread programming in Linux

我知道Linux内核和libc中的线程实现过去经历了很大的变化。 今天在C程序中使用线程的最佳方法是什么? (我甚至不知道是否有多个API可以使用 - 我只知道pthreads)

我不太关心旧内核和libc版本,但我确实关心有效使用多个内核和可移植性(我可能希望我的代码也可以在其他Unix上运行)。

如果我只使用man 7 pthreads描述的Posix线程并将我的代码限制在POSIX API就可以了吗?

编辑 :感谢所有回答的人。 我确实想过使用一些可用的线程池库,但对于这个项目,这真的不是一个选项。

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

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

POSIX线程是一个很好的选择和流行的。 在使用C / C ++编程时,您可能还希望查看Boost ThreadsIntel Thread Building Blocks以获取其他选项,而不是直接编写到POSIX API。 具体而言,英特尔TBB声称以易于使用和高效的方式使用多核处理器。 我对TBB没有太多经验,但我已经看到使用TBB大大减少了代码大小和复杂性的演示,并且使用由经验丰富的工程师编写的POSIX线程在直接C ++中编写的实现速度快了几个数量级。

使用线程很困难且容易出错。 如果可能,请避免直接编程。 可以在这里找到关于这个主题的写得很好的论文。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM