在过去的五年里,主要从事的是Java和零星的.NET,在此期间没有编写过任何重要的C或C++。所以已经离开现场一段时间了。
如果我今天想编写一个C或C++程序,它可以做一些多线程,源代码是否可以移植到Windows、Mac和Linux/Unix --那么PThread是一个不错的选择吗?
C或C++代码不会执行任何GUI操作,因此不需要担心这些。
但是,对于Windows平台,我不想在Unix仿真运行时库方面带来太多unix包袱。我更喜欢Windows,它是一个薄的、可能的包装器,而不是现有的PThread线程API。
增编编辑:
我倾向于使用boost:线程-我也希望能够使用C++尝试/捕获异常处理。尽管我的程序非常小,而且不是特别的OOPish,但我喜欢使用类和命名空间进行封装--而不是C不具体化的函数。
发布于 2009-01-31 23:30:32
好吧,线程是用于编写线程程序的旧的posix标准。它是最底层的线程处理程序,所以它是跨平台线程的一个很好的选择。
然而,也有其他选择:
由于后者在所有平台上都得到了完全支持(除非您想使用螺纹-W32,否则p线程需要一些编译器设置作为Windows子系统的唯一部分),所以后一种可能是更好的选择。boost:线程更像是线程库,另外两个线程是实现并行性的高级方法,而不需要编写“线程”代码,它们允许您编写并发运行的循环(取决于常识条件)。
线程不是一个C兼容的库。
编辑:以上跨平台能力:
Intel TBB是跨平台的 (Windows*、Linux*和Mac OS* X)支持32位和64位应用程序,并与英特尔、微软和GNU编译器合作。
OpenMP取决于您想要使用的编译器,但是GCC和/或Intel 编译器支持 OpenMP Windows、Linux和MacOS。
发布于 2009-02-01 00:19:41
如果您需要您的代码是真正可移植的,那么最好远离分散在互联网上的各种库。在某个时候,您将找到一个他们不支持的平台,然后必须创建您自己的分支。
这也不是一个很难解决的问题,也是创建跨平台代码的一个很好的练习。
我建议您创建一个类(例如CThread ),它对每个平台都有单独的.cpp实现,并在构建/运行线程之后调用一个纯虚拟execute()函数。
这允许使用最适合平台的API实现所有线程创建和睡眠/关闭/优先级代码。您还可能需要一个包含每个平台的定义/类型的标题(例如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等平台编写的所有跨平台线程代码。对于诸如互斥锁和信号量这样的东西,它也是一个很好的模式,如果您有线程,那么在某个时候您肯定需要:)
发布于 2009-01-31 23:23:51
不,在Windows上通常不能使用线程。(有几次尝试实现它,但至少操作系统不直接支持它。)
如果你在写C++,跟往常一样,Boost就是答案。Boost.Thread有一个可移植(且更安全)的线程库。
在C中,最简单的解决方案可能是为p线程和Windows线程API包装编写公共包装器。
https://stackoverflow.com/questions/499780
复制相似问题