pthreads-win32在各种Windows编译器上的可移植性

我使用pthreads-win32来允许对windows的线程支持。

我有一个跨平台的项目,使用pthreads,我想使它在各种编译器和不同的操作系统版本的Windows上工作。

至less,根据文档pthreads-win32应该与MSVC一起工作,甚至提供MSVC构build。

但是我不知道该库是否使用最新的MSVC编译器(如MSVC-2008)进行testing,以及是否支持64位窗口。

你自己的经验 ,你知道这个图书馆的任何问题?

  • 任何问题与MSVC8,MSVC9,MSVC10?
  • Windows x86_64的任何问题?
  • Windows Vista / Windows 7的任何问题?

笔记:

  • 甚至不要尝试推荐使用Boost.Thread,我不感兴趣,而且我熟悉Boost.Thread库
  • 我不想重新发明Win32 API(缺lessRW锁,条件variables等)。
  • 我确实设法使用MSVC-2008和MinGW GCC-4.3编译项目,然后使用当前预编译的pthreads DLL轻松地在其上运行unit testing。

我只需要知道pthreads-win32的限制。

Solutions Collecting From Web of "pthreads-win32在各种Windows编译器上的可移植性"

那么, paxdiablo显然是在这里总结出来的。 但是从我过去的这个图书馆的经验来看,我可以在这里添加一些东西。

首先,我已经使用MSVC 2008的库函数的一个子集,没有任何问题。

其次,我的一些同事已经在x86_64(MSVC2008和MinGW)上做了这个工作。 经过多次beta和QA测试,他们还没有遇到任何问题。 虽然我自己没有测试过,所以不能确定。

所以从外观上看,可能适合使用。 唯一需要注意的是,如果您发现任何问题,您将会受到不太活跃的邮件列表的支配(或者您可能希望弄清楚源代码或类似的东西)。

不能肯定地说,这可能不是你想听到的,但是,鉴于最新的版本是在2006年 ,我会很警惕在最新的编译器中使用它。 它可能工作,但它可能会取决于你。 似乎有很多讨论关于如何在Cygwin和MinGW中工作,但是对于MSVC来说很少,而在MSVC2005之外我什么也找不到。

另外,如果您检查CVS存档,那么在过去一年(大部分是两到五年前),已经有很少的文件被更新了。 不到一年前的这对夫妇的描述是“评论和代码风格的变化”,这让我相信产品的一点肉都没有被积极发展一段时间。

现在也许我错了,这只是一个写得非常好的,稳定的产品,但是我的内在本质更可能得出结论,它是走在一边的好想法之一。

而看看邮件列表,2010年头五个月里只发布了七条消息(最早的四个月没有答复),而2009年全年只有59条消息。让我感到怀疑的是,看起来像一个大规模的活力支持社区。

似乎有一个针对64位Windows的补丁程序(见2010年的档案),但是,似乎还有一些问题,从二月份开始就没有答案,只提到了对MinGW的支持:

…这个补丁(有点粗糙,需要一些最后的清理和测试运行makefile的一些扩展来允许CROSS在这里)使得可以为x86_64-pc-mingw32目标构建pthread。

不是我用于我的任务关键型软件的事情。

而且我知道你说你对重新发明轮子不感兴趣,但是你可以很容易地从更基本的原语实现多读卡器锁定和条件变量 – 我甚至有一个多读者方案来解决写饥饿问题几乎让我获得了专利(不是我同意软件专利,但我的雇主坚持认为它们是有价值的)。

如果你只有一个轮子有一半的轮幅失踪,可怕的弯曲变形,你可能只需要重新考虑:-)

无论如何,Vista和server2k8都引入了条件变量和狭窄的读写器锁 。 自Win2k以来, 线程本地存储已经存在。 我知道,如果你仍然需要支持XP,那将是无济于事的,但是我会展望未来。

而且由于您似乎已经将可移植性定义为“仅限Windows”,并且所需的所有功能都可以在当前版本中使用,所以我不确定是否看到了坚持使用pthread的优势。 如果你想要POSIX的可移植性,是的,但在这里似乎并不是这样。

惊讶的是,没有人建议英特尔的线程构建模块。 它们非常活跃,支持几乎所有的事情,最新版本不到两周前,如果使用兼容的编译器,则可以使用C ++ 0x功能。

http://software.intel.com/en-us/intel-tbb/#sysreq