首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PThread是多平台C/C++多线程程序的好选择吗?

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

Stack Overflow用户
提问于 2009-01-31 23:18:04
回答 5查看 11.9K关注 0票数 15

在过去的五年里,主要从事的是Java和零星的.NET,在此期间没有编写过任何重要的C或C++。所以已经离开现场一段时间了。

如果我今天想编写一个C或C++程序,它可以做一些多线程,源代码是否可以移植到Windows、Mac和Linux/Unix --那么PThread是一个不错的选择吗?

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

但是,对于Windows平台,我不想在Unix仿真运行时库方面带来太多unix包袱。我更喜欢Windows,它是一个薄的、可能的包装器,而不是现有的PThread线程API。

增编编辑:

我倾向于使用boost:线程-我也希望能够使用C++尝试/捕获异常处理。尽管我的程序非常小,而且不是特别的OOPish,但我喜欢使用类和命名空间进行封装--而不是C不具体化的函数。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-31 23:30:32

好吧,线程是用于编写线程程序的旧的posix标准。它是最底层的线程处理程序,所以它是跨平台线程的一个很好的选择。

然而,也有其他选择:

  • 推动::线程 -一个STL风格的线程库
  • 英特尔的线程构建块
  • OpenMP --这两种方式都是一种更高级的编写线程应用程序的方法,而不需要执行任何线程调用。

由于后者在所有平台上都得到了完全支持(除非您想使用螺纹-W32,否则p线程需要一些编译器设置作为Windows子系统的唯一部分),所以后一种可能是更好的选择。boost:线程更像是线程库,另外两个线程是实现并行性的高级方法,而不需要编写“线程”代码,它们允许您编写并发运行的循环(取决于常识条件)。

线程不是一个C兼容的库。

编辑:以上跨平台能力:

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

OpenMP取决于您想要使用的编译器,但是GCC和/或Intel 编译器支持 OpenMP Windows、Linux和MacOS。

票数 15
EN

Stack Overflow用户

发布于 2009-02-01 00:19:41

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

这也不是一个很难解决的问题,也是创建跨平台代码的一个很好的练习。

我建议您创建一个类(例如CThread ),它对每个平台都有单独的.cpp实现,并在构建/运行线程之后调用一个纯虚拟execute()函数。

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

例如。

代码语言:javascript
复制
// ThreadTypes.h
#if defined(PLATFORM_WIN) || defined(PLATFORM_XBOX)
  typedef DWORD ThreadID
#elif defined(PLATFORM_PS3)
  // etc etc
#endif

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

票数 11
EN

Stack Overflow用户

发布于 2009-01-31 23:23:51

不,在Windows上通常不能使用线程。(有几次尝试实现它,但至少操作系统不直接支持它。)

如果你在写C++,跟往常一样,Boost就是答案。Boost.Thread有一个可移植(且更安全)的线程库。

在C中,最简单的解决方案可能是为p线程和Windows线程API包装编写公共包装器。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/499780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档