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

我有一个使用Pthreads的跨平台项目,我想让它在Windows上使用各种编译器和不同的OS版本。

至少,根据文档,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锁,有条件变量等)重新发明车轮不感兴趣。
  • 我确实设法使用MSVC-2008和MINGW GCC-4.3编译了一个项目,然后使用当前预编译的PTHreads DLL轻松地在其上进行单元测试。

我只需要知道pthreads-win32的局限性即可。

有帮助吗?

解决方案

出色地, paxdiablo 显然在这里总结了这一点。但是,从我过去在这个图书馆的经验来看,我可以在这里添加几件事。

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

其次,我的一些同事在X86_64(带有MSVC2008和MINGW)上进行了操作。经过许多β和QA测试周期,他们也没有遇到任何问题。尽管我自己还没有测试过,所以不能非常确定这一点。

因此,从事物的外观上看,它可能适合使用。这里唯一的警告是,如果您发现任何问题,您将受到不太活跃的邮件列表的摆布(或者也许您可能想用源代码或类似的东西使您的手变得肮脏)。

其他提示

不能肯定地说,这可能不是您想听的,但是鉴于最后一个版本已经过时了 2006, ,我非常警惕在最新的编译器中使用它。它 可能 工作,但这可能取决于您要继续前进。似乎有很多关于让它在Cygwin和Mingw中工作的讨论,但对于MSVC而言,很少有珍贵的内容,以及 没有什么 我可以在MSVC2005之外找到。

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

现在也许我错了,这只是一个写得很好,稳定的产品,但我的内在性质更有可能得出结论,这是一定数百万个好主意之一。

而且,请查看邮件列表,2010年前五个月(其中最早的四个月都没有得到答复),在整个2009年中只有59个消息。 t看起来像是一个充满活力的支持社区。

似乎有一个64位窗户的补丁(请参阅 这里 在2010年的档案中),但同样,这似乎有自2月以来没有得到答复的问题,并且仅提及对MINGW的支持:

...此补丁(有点粗糙,需要进行一些最终清理,并在测试运行makefile上进行一些扩展,以便在此处允许交叉),使Pthread可以为X86_64-PC-MINGW32目标构建。

这是 不是 我将用于关键任务软件的那种事情。

而且我知道您说您对重新发明方向盘不感兴趣,但是您可以很容易地从更基本的原语中实现多阅读器锁和条件变量 - 我什至有一个多阅读器方案,可以解决写入饥饿问题从某种意义上说,几乎获得了我的专利(并不是我同意软件专利,而是我的雇主坚持认为它们很有价值)。

而且,如果您唯一的车轮缺少一半的辐条,并且弯曲了形状,那么您可能只需要重新考虑:-)

无论如何,Vista和Server2K8都引入了两者 条件变量细长的读者/作家锁. 线程本地存储 自WIN2K以来就已经存在。我知道,如果您仍然需要支持XP,那将无济于事,但我会展望未来。

而且,由于您似乎已将可移植性定义为“仅限Windows”,并且您想要的所有功能都在当前版本中可用,因此我不确定我是否会看到坚持使用Pthreads的优势。如果您想携带Posix的便携性,是的,但是这里似乎并非如此。

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

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

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