当前位置:  开发笔记 > 编程语言 > 正文

PThread是多平台C/C++多线程程序的不错选择吗?

如何解决《PThread是多平台C/C++多线程程序的不错选择吗?》经验,为你挑选了2个好方法。

在过去的五年里,我一直在做Java和一些.NET,而且在那段时间里没有写过任何重要的C或C++.所以离开那个场景一段时间了.

如果我今天要编写一个C或C++程序来执行一些多线程并且可以跨Windows,Mac OS X和Linux/Unix移植源代码 - 那么PThread是一个不错的选择吗?

C或C++代码不会执行任何GUI,因此不需要担心任何这些.

对于Windows平台,我不想在unix仿真运行时库方面带来很多Unix包袱.更喜欢用于Windows的PThread API,它是现有Windows线程API的尽可能薄的包装器.

附录编辑:

我倾向于使用boost:thread - 我也希望能够使用C++ try/catch异常处理.即使我的程序相当简单而且不是特别OOPish,我喜欢使用类和命名空间封装 - 而不是C无实体的函数.

gbjbaanb.. 15

好吧,pthreads是编写线程程序的旧posix标准.它是最低级别的线程例程,因此它是跨平台线程的不错选择.

但是,还有其他选择:

boost :: thread - 一个STL样式的线程库

英特尔的线程构建模块

OpenMP - 这些都是编写线程应用程序的更高级别的方式,无需进行任何线程调用.

由于后者在所有平台上都得到完全支持,(pthreads需要一些编译器设置作为Windows posix子系统的唯一部分,除非你想使用Pthreads-w32),那么后者可能是更好的选择.boost :: threads更像是一个线程库,另外两个是实现并行性的高级方法,无需编写'线程',它们允许你编写自动并发运行的循环(受常识条件限制)

但是,Boost :: thread不是C兼容的库.

编辑:以上的跨平台能力:

英特尔TBB是跨平台的(Windows*,Linux*和Mac OS*X),支持32位和64位应用程序,可与英特尔,微软和GNU编译器配合使用.

OpenMP依赖于您要使用的编译器,但GCC和/或英特尔编译器支持 OpenMP Windows,Linux和MacOS.



1> gbjbaanb..:

好吧,pthreads是编写线程程序的旧posix标准.它是最低级别的线程例程,因此它是跨平台线程的不错选择.

但是,还有其他选择:

boost :: thread - 一个STL样式的线程库

英特尔的线程构建模块

OpenMP - 这些都是编写线程应用程序的更高级别的方式,无需进行任何线程调用.

由于后者在所有平台上都得到完全支持,(pthreads需要一些编译器设置作为Windows posix子系统的唯一部分,除非你想使用Pthreads-w32),那么后者可能是更好的选择.boost :: threads更像是一个线程库,另外两个是实现并行性的高级方法,无需编写'线程',它们允许你编写自动并发运行的循环(受常识条件限制)

但是,Boost :: thread不是C兼容的库.

编辑:以上的跨平台能力:

英特尔TBB是跨平台的(Windows*,Linux*和Mac OS*X),支持32位和64位应用程序,可与英特尔,微软和GNU编译器配合使用.

OpenMP依赖于您要使用的编译器,但GCC和/或英特尔编译器支持 OpenMP Windows,Linux和MacOS.



2> Andrew Grant..:

如果您需要您的代码真正可移植,那么最好远离散布互联网的各种库.在某些时候,你会找到一个他们不支持的平台,然后必须创建自己的分支.

这也不是一个难以解决的问题,可以很好地用于创建跨平台代码.

我建议你创建一个类,例如CThread,它为每个平台提供单独的.cpp实现,以及在构造/运行线程后调用的纯虚拟execute()函数.

这允许使用最适合的平台API实现所有线程创建和睡眠/关闭/优先级代码.您可能还需要一个包含每个平台的define/typedef的标头(例如ThreadTypes.h).

例如

// ThreadTypes.h
#if defined(PLATFORM_WIN) || defined(PLATFORM_XBOX)
  typedef DWORD ThreadID
#elif defined(PLATFORM_PS3)
  // etc etc
#endif

这就是我为PC/PS2/PS3/360/Wii等平台编写所有跨平台线程代码的方法.对于像互斥锁和信号量这样的东西来说,它也是一个很好的模式,如果你有线程,你肯定需要在某些时候:)

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有