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

时间:2010-05-09 13:06:25

标签: windows visual-c++ pthreads pthreads-win32

我正在使用pthreads-win32来允许对Windows进行线程支持。

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

至少,根据文档,pthreads-win32应该与MSVC一起工作甚至 提供的MSVC版本。

但我不知道该库是否已经过最新的MSVC编译器测试,如MSVC-2008和 如果在64位窗口下支持它。

您自己的经验您是否了解此库存在的任何问题?

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

注意:

  • 甚至不建议使用Boost.Thread,我不感兴趣。而且我熟悉Boost.Thread库
  • 我对使用Win32 API(没有RW-Locks,条件变量等)重新发明Wheel感兴趣。
  • 我确实设法使用MSVC-2008和MinGW GCC-4.3编译项目,然后使用当前预编译的pthreads DLL轻松地对其进行单元测试。

我只需要了解pthreads-win32的限制。

3 个答案:

答案 0 :(得分:8)

嗯, paxdiablo 显然在这里总结了一下。但是根据我过去使用这个库的经验,我可以在这里添加一些东西。

首先,我在MSVC 2008中使用了库的功能子集而没有任何问题。

其次,我的一些同事已经开始使用x86_64(使用MSVC2008和MinGW)。经过多次beta和QA测试后,他们没有遇到任何问题。虽然我自己没有测试过,所以不能确定这个。

因此,根据事物的外观,它可能适合使用。这里唯一需要注意的是,如果你发现任何问题,你将受到一个不那么活跃的邮件列表的支配(或许你可能想要弄清楚源代码或类似的东西)。

答案 1 :(得分:2)

不能肯定地说,这可能不是你想听到的,但鉴于最后一个版本是2006,我会非常谨慎地在最新的编译器中使用它。它可以工作,但它可能取决于你。似乎有很多关于让它在Cygwin和MinGW中工作的讨论,但对MSVC来说很少见,而且除了MSVC2005之外我什么都没有

另外,如果您检查CVS档案,那么去年(大多数是两到五年前)更新的文件很少。不到一年前约会的这对夫妇有“评论和代码风格的变化”的描述,这使我相信产品的所有部分都没有在一段时间内积极开发。

现在也许我错了,这只是一个写得非常好的,稳定的产品,但我内心的本性更有可能得出结论,它是被淘汰的好主意之一。

而且,看一下邮件列表,2010年前五个月只发布了七条消息(其中最早的消息四个月未得到答复),整个2009年只有59封。彩色我持怀疑态度但这似乎不是一个充满活力的支持社区。

似乎有一个针对64位Windows的补丁(请参阅2010年档案中的here),但同样,这似乎有问题,自2月以来没有得到答复,它只提到对MinGW的支持:

  

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

这是我将用于关键任务软件的那种东西。

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

如果你拥有的唯一一个轮子有一半的轮辐缺失并且可怕地弯曲变形,你可能只需要重新考虑: - )

无论如何,Vista和Server2k8都引入了condition variablesslim reader/writer locksThread-local storage自Win2k以来一直存在。我知道,如果你仍然需要支持XP,那将无济于事,但我会展望未来。

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

答案 2 :(得分:0)

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

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

相关问题