2010-05-09 40 views
11

我使用pthreads-win32来允许对Windows进行线程化支持。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的Wheel(缺少RW-Locks,条件变量等)不感兴趣。
  • 我确实设法使用MSVC-2008和MinGW GCC-4.3编译项目,然后使用当前预编译的pthreads DLL轻松地对它进行单元测试。

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

+0

** ** portable **你的意思只是在Windows版本之间?如果是这样,我会坚持kernel32 API。或者是否有使用pthread-win32的显着优势? – jweyrich 2010-05-09 13:13:45

+0

@jweyrich。我的意思是我可以使用最新的MSVC-2008&| Windows7&| x86_64的。不,使用Win32 API不是一个选项(没有线程特定的指针,没有RW锁,没有条件变量等) – Artyom 2010-05-09 13:17:15

回答

8

那么,paxdiablo显然总结在这里。但从我过去的这个图书馆的经验来看,我可以在这里添加一些东西。首先,我已经使用MSVC 2008的函数库的一个子集,没有任何问题。其次,我的一些同事已经在x86_64(MSVC2008和MinGW)上运行了。经过多次beta和QA测试后,他们还没有遇到任何问题。虽然我自己没有测试过,所以在这一个上不能确定。

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

+0

谢谢,那正是我想知道的。 – Artyom 2010-05-17 13:01:41

2

不能说一定的,这可能不是你想听到的,但鉴于最新版本的日期是2006,我会非常小心在最新的编译器中使用它。它可能工作,但它可能会取决于你去。似乎有很多讨论关于让它在Cygwin和MinGW中工作,但对于MSVC来说很少,没有什么我可以在MSVC2005之外找到它。另外,如果您检查CVS存档,那么在过去一年(大部分是两到五年前)中已经更新了宝贵的少量文件。这对不到一年前的夫妇有“评论和代码风格变化”的描述,这让我相信产品的一切都没有在一段时间内积极发展。

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

而且,看看邮件列表,2010年前五个月中只发布了七条消息(其中最早的一条未被答复四个月),2009年全年只有59条消息。持怀疑态度,但似乎并不像一个大规模的充满活力的支持社区。

似乎有一个补丁用于64位Windows(见2010年档案here),但同样,这似乎有哪些是没有答案,因为二月的问题,而且只提到了MinGW的支持:

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

这是而不是我将用于我的任务关键型软件。

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

如果你拥有的唯一轮有一半的辐条失踪,是可怕的弯曲变形,你可能只是需要重新考虑:-)

在任何情况下,Vista和Server2k8介绍了这两份condition variablesslim reader/writer locks。自Win2k以来一直存在Thread-local storage。我知道,如果你仍然需要支持XP,那么这将无济于事,但我会展望未来。

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

+0

几点:我编译我的项目与MSVC版本的pthreads,运行单元测试,它的工作原理...(MSVC 2008),所以我认为它很好的调试,支持并存在多年。 (注意,我没有编译它,而是使用MSVC预编译的二进制文件)。关于TLS - Windows TLS API甚至不允许为TLS指针提供析构函数...您需要编写相当复杂的内容才能使其工作。也有crirtical章节/条件变量你仍然必须管理如何使用递归/非递归锁。用pthread它是简单的标志metter。 – Artyom 2010-05-12 07:20:01

+0

注意:我需要pthreads,因为它是可移植的项目,Windows是它想要支持的平台之一。我需要知道pthreads库的局限性,以找出哪些工作可行,哪些不可行。 – Artyom 2010-05-12 07:22:34

+0

我明显误解了你的可移植性要求 - 它似乎不包括非Windows平台。我的建议是,通过在产品本身的留言板上发布信息,你会得到更有针对性的回应,因为你已经在这里得到了两天的小回复,而且我们通常都很饶有兴趣并且很有见地,准备好让你只需很少的提示知道我们的想法:-)但是,考虑到他们董事会的活动,您可能需要等一等。如果你掌握了这一点,那么你就是最关键的。我仍然关心支持,但这取决于你的情况。 – paxdiablo 2010-05-12 07:46:08

0

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

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

+3

它是开源的吗? AFAIK没有。所以我不感兴趣。第二我对其他图书馆不感兴趣。我宁愿了解pthreads-win32的局限性 – Artyom 2010-05-17 13:00:24