我正在寻找C ++的轻量级多线程框架。我找到了POSIX线程 请与POSIX线程分享您的实践经验:在我开始之前,我想知道它来自真实的人的利弊,而不是来自wiki。 如果你几乎把它与任何东西(也许,更好)进行比较,那么了解它们会很有趣。
UPD:跨平台功能对我来说非常重要,所以我很欣赏这个方向。
UPD2:我已经体验过QNX / Win32的一个框架,但它不是轻量级的 - 哦,我忘了提, - 它是商业的,不是免费的,但我需要一个免费的。
答案 0 :(得分:12)
我发现Boost.Threads非常好,特别是在重写1.35之后。 Windows上的POSIX线程并不是那么简单,它是一个C API,所以我肯定更喜欢Boost。它拥有您需要的所有东西,便携且几乎不需要设置。
答案 1 :(得分:3)
另一个C线程API是来自GLib的GThreads。一些gthread和pthread调用之间存在一对一的映射,例如pthread_create,但gthreads有两个我发现非常有用的大功能:
线程池非常强大,允许动态调整池的大小。见http://library.gnome.org/devel/glib/2.20/glib-Threads.html
答案 2 :(得分:2)
POSIX线程API是一个C API,而不是C ++。
你想用它做什么?就个人而言,我发现它是一个非常笨拙和过于冗长的API。但如果你想在Unix / Linux类操作系统上进行跨平台开发,那么这是你最好的选择。它本身不支持Windows。
就个人而言,我不会在您的代码中直接使用线程或任何其他依赖于操作系统的API。在它上面构建另一个抽象层。例如,我们构建了所谓的“OS层”;用于处理线程,信号量,定时器,互斥体等的C ++框架。我们的代码专门使用它。在幕后,我们有POSIX,Win32,INTEGRITY和vxWorks的实现。这使我们的代码可以在各种平台上运行。
如果您不想构建自己的图层,可以重新使用其他许多图像,例如Boost,Qt等。
答案 3 :(得分:2)
前一段时间我使用POSIX作为我编写的程序。它在Linux和Solaris上运行良好,实现起来并不复杂。另一方面,我的兄弟是Windows程序员,并且首选对Posix提升。我想这取决于你的目标。我发现提升有点臃肿,并听到了不好的事情。我哥哥认为这是切片面包以来最棒的东西。我想这是福特与雪佛兰的事情。每个人都会有意见。
答案 4 :(得分:2)
答案 5 :(得分:1)
正如你提到QNX看看ACE。它是many platforms(包括QNX)可用的庞大框架。 其他人已经提到Boost。
建议您使用其中一个库而不是低级,非便携且容易出错的C API。
答案 6 :(得分:1)
Boost线程库可能是你最好的选择。在Unix和win32上我都有非常积极的经验。避免ACE - 糟糕的设计,错误的方法。另请查看Intel TBB,但我没有在实践中使用它。
答案 7 :(得分:0)
我发现它与win32线程API非常相似,你需要注意的唯一(实际)差异是win32互斥锁在posix执行时在同一线程上使用时不会阻塞。除此之外,它是一个非常直接的API。