11

我正在使用 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 锁、条件变量等)重新发明轮子不感兴趣。
  • 我确实设法用 MSVC-2008 和 MinGW GCC-4.3 编译了一个项目,然后使用当前预编译的 pthreads DLL 轻松地对其运行单元测试。

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

4

3 回答 3

8

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

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

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

因此,从外观上看,它可能适合使用。这里唯一需要注意的是,如果您发现任何问题,您将受到一个不那么活跃的邮件列表的摆布(或者您可能想要弄脏源代码或类似的东西)。

于 2010-05-17T12:36:27.470 回答
2

不能肯定地说,这可能不是你想听到的,但鉴于最后一个版本的日期是2006,我会非常警惕在最新的编译器中使用它。它可能会起作用,但它可能会由你来完成。似乎有很多关于让它在 Cygwin 和 MinGW 中工作的讨论,但对于 MSVC 来说却很少,而且除了 MSVC2005 之外我找不到任何东西。

此外,如果您检查 CVS 档案,去年更新的文件很少(大多数是两到五年前)。这对约会不到一年的夫妇有“评论和代码样式更改”的描述,这让我相信该产品的任何内容都没有在一段时间内处于积极开发中。

现在也许我错了,这只是一个写得非常好、稳定的产品,但我的内在天性更有可能得出结论,它是被搁置的无数好主意之一。

而且,看看邮件列表,在 2010 年的前五个月中只发布了 7 条消息(其中最早的消息已经四个月没有得到答复),而整个 2009 年只有 59 条。让我持怀疑态度,但事实并非如此看起来不像是一个充满活力的支持社区。

似乎有一个针对 64 位 Windows 的补丁(请参阅2010 档案中的此处),但同样,这似乎存在自 2 月以来未得到解决的问题,它只提到了对 MinGW 的支持:

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

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

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

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

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

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

于 2010-05-12T06:00:42.157 回答
0

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

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

于 2010-05-17T12:49:34.307 回答