过去五年来,我主要从事 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:线程 - 我也希望能够使用C ++尝试/捕获异常处理。即使我的程序将相当最小,而且不是特别糟糕,但我还是喜欢使用类和名称空间封装,而不是c毫无界的功能。

有帮助吗?

解决方案

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

但是,还有其他选择:

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

不过,Boost::thread 不是 C 兼容库。

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

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

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

其他提示

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

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

我建议你创建一个类,例如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 等平台编写所有跨平台线程代码的方式。对于互斥锁和信号量之类的东西来说,这也是一个很好的模式,如果您有线程,那么您在某些时候肯定会需要它们:)

不,并行线程通常不Windows上可用。 (有在执行它的几个尝试,但它不是由OS直接支撑,至少)

如果你正在写C ++,升压是,像往常一样,答案。 Boost.Thread具有便携式的(和更安全的)线程库。

在C,最简单的解决方案可能是包装写两个并行线程和Windows线程API共同包装。

我将赌ZThread

简单API,比Pthreads并且可以自由使用更容易

看一看又廷: http://code.google.com/p/ting/

有Windows和Linux之间的跨平台。没有MAC OS的支持呢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top