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

pthreads-win32在各种windows编译器上的可移植性,windows,visual-c++,pthreads,pthreads-win32,Windows,Visual C++,Pthreads,Pthreads Win32,我正在使用pthreads-win32来支持windows的线程 我有一个使用pthreads的跨平台项目,我想让它在具有各种编译器和不同操作系统版本的windows上工作 至少,根据文档,pthreads-win32应该与MSVC甚至 提供MSVC构建 但我不知道该库是否使用最新的MSVC编译器(如MSVC-2008和MSVC)进行了测试 如果它在64位windows下受支持 根据您自己的经验您是否意识到此库存在任何问题 MSVC8、MSVC9、MSVC10有什么问题吗 Windows x8

我正在使用pthreads-win32来支持windows的线程

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

至少,根据文档,pthreads-win32应该与MSVC甚至 提供MSVC构建

但我不知道该库是否使用最新的MSVC编译器(如MSVC-2008和MSVC)进行了测试 如果它在64位windows下受支持

根据您自己的经验您是否意识到此库存在任何问题

  • 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的局限性。

不能肯定,这可能不是你想听到的,但是,考虑到上一个版本已经过时,我会非常小心在最新的编译器中使用它。它可能会起作用,但可能要由你来决定。关于如何让它在Cygwin和MinGW中工作,似乎有很多讨论,但对MSVC来说却很少,除了MSVC2005,我找不到任何东西

另外,如果你检查CVS档案,有一些珍贵的文件在去年更新过(大多数是2到5年前)。这对不到一年前的夫妇有“注释和代码样式更改”的描述,这让我相信,该产品的任何部分都没有在积极开发一段时间

现在,也许我错了,这只是一个写得非常好、非常稳定的产品,但我的内心更倾向于认为这是被搁置一旁的无数好主意之一

而且,看看邮件列表,2010年前五个月只有七封邮件(最早的一封邮件已经四个月没有回复),2009年全年只有59封。让我感到怀疑,但这似乎不是一个充满活力的支持社区

似乎有一个64位Windows的补丁(见2010年档案),但同样,这似乎有一些问题,自2月份以来一直没有得到解决,它只提到了对MinGW的支持:

。。。此修补程序(有点粗糙,需要进行一些最终清理,并对测试运行makefile进行一些扩展,以允许在此处交叉)允许为x86_64-pc-mingw32目标构建pthread

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

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

如果你唯一的车轮缺了一半辐条,而且严重弯曲变形,你可能需要重新考虑:-)

无论如何,Vista和Server2k8都引入了和。从Win2k开始就存在了。我知道,如果你仍然需要支持XP,这将不会有帮助,但我会展望未来

而且,由于您似乎已经将可移植性定义为“仅限Windows”,并且您想要的所有功能都在当前版本中可用,因此我不确定是否认为坚持使用pthreads有什么好处。如果您想要POSIX的可移植性,是的,但这里似乎不是这样。

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

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

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


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

对于没有人建议使用英特尔的线程构建块,您感到惊讶。它们非常活跃,几乎支持所有东西,最新版本不到两周前发布,如果您使用兼容的编译器,还可以使用C++0x特性


所谓可移植性,您的意思是仅在Windows版本之间?如果是这样,我会坚持使用kernel32api。或者使用pthread-win32是否有显著的优势?@jweyrich。我的意思是我可以将它与最新的MSVC-2008&| Windows7&| x86 | U 64一起使用。不,使用Win32 API不是一个选项(没有特定于线程的指针,没有RW锁,没有条件变量等)。几点:我用pthreads的MSVC版本编译了我的项目,运行单元测试,它可以工作。。。(MSVC 2008),所以我确实假设它经过了良好的调试、支持并存在多年。(注意,我没有编译它,而是使用了MSVC的预编译二进制文件)。关于TLS-Windows TLS API甚至不允许您为TLS指针提供析构函数。。。你需要写一些非常复杂的东西来让它工作。还有crirtical section/条件变量,您仍然需要管理如何使用递归/非递归锁。有了pthread,它是一个简单的标志。注意:我需要pthread,因为它是一个可移植的项目,Windows是平台之一