为Winthreads for XP实现CRITICAL_SECTIONs的条件变量
我希望Win32上的POSIX样式条件变量.我有一些代码需要在XP上运行,所以我不能使用Vista / Server 2008的CONDITION_VARIABLE.
它使用当前的伪条件变量类,其基于离开关键部分并且发出用于信令/唤醒的自动复位事件.为了等待条件变量,它将在事件上离开关键部分WaitForSingleObjects,然后重新输入关键部分.这是很好的,但它不支持广播,也可能有其他问题在公平性,我不在乎太多. 我们使用boost,所以我知道我可以使用boost线程或pthreads-win32,它支持条件变量,但是理想情况下,我希望接口能够在/当可以使用/它直接我已经看到了Strategies for Implenting POSIX Condition Variables on Win32,但是“最好的”(最正确的)解决方案使用了一个互斥而不是一个CRITICAL_SECTION.在second part中有一个CRITICAL_SECTION的实现草图,但它还不完整,其他解决方案与CRITICAL_SECTION关系到我,因为他们在文章中概述了这些问题. 简而言之,如何实现一个正确的,不一定公平的(但是这样很好),关于win32的条件变量是关键部分,这样我可以在微软的实现中放弃我吗?
您所提交的论文是由我的同事撰写的,作为我们对ACE C框架及其操作系统包装外观工作的一个过程.正如我的生物中提到的,“我不做Windows”,但是我仍然积极地在ACE上工作,我刚刚看了一下,似乎Win32的条件变量实现使用了CRITICAL_SECTION(初始检查看起来像是只是使用互斥体,但是如果您深入挖掘,您会发现下面有一个层,互斥体在Windows平台上被定义为CRITICAL_SECTION).
FYI,为了确保代码没有被修改为使用新的Vista API,我检查的代码库实际上是1.5行分支. 假设您只需要一个C API作为条件变量,而不是C包装器,所有这些都应包含在一组文件中:ace / OS_NS_Thread.{h,inl,cpp} ACE的许可证非常慷慨,不是GPL,所以您可以将代码从那里提升为专有代码库,而不必担心“GPL污染”. 您可以在http://download.dre.vanderbilt.edu/获得ACE版本;我检查的版本是商业支持的版本,源自ACE 5.5.2,由OCI维护,可在http://www.theaceorb.com/downloads/1.5a/index.html下载. 为了充分披露,我一直是ACE的长期使用者/贡献者/维护者,曾在该研究人员工作了一段时间,现在是OCI的雇员.我不认为这会改变这段代码的实用性/适用性,也不会导致您从源代码中提取代码的收入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 使用后删除临时文件
- windows 升级phpStudy 中MySQL 版本至5.7.17
- windows-phone-7.1 – 将免费的Windows手机应用程序更改为付
- windows-server-2008-r2 – 如何在Server 2008 R2中进入待机
- windows-server-2012 – RackSpace Cloud中IIS8和MSSQL 201
- windows-server-2008 – 如何编辑另一个磁盘的启动配置数据
- shift后门
- windows – 如何在不注销的情况下修改用户的PATH环境变量?
- windows – Filezilla在MLSD之后停止连接
- 如何在Windows 7上安装Zombie JS? (node.js无头浏览器)
- 如何通过SNMP或其他方式监视Windows CPU和风扇温
- 使用Windows快捷方式运行R脚本
- Windows.event未定义 – Firefox中的JavaScript错
- 在Windows资源管理器中以编程方式选择多个文件
- windows-server-2008 – 如何确定我的DHCP服务器
- Windows如何决定是否显示UAC提示?
- 在Windows server 2019 Core 版本上安装SQL2016
- windows – 是否可以在Visual Studio中构建Monot
- 在window下安装Redis数据库,并用python链接Redi
- windows-7 – 你能识别我的localhost:8000上运行