加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

为Winthreads for XP实现CRITICAL_SECTIONs的条件变量

发布时间:2020-12-14 01:38:42 所属栏目:Windows 来源:网络整理
导读:我希望Win32上的POSIX样式条件变量.我有一些代码需要在XP上运行,所以我不能使用Vista / Server 2008的CONDITION_VARIABLE. 它使用当前的伪条件变量类,其基于离开关键部分并且发出用于信令/唤醒的自动复位事件.为了等待条件变量,它将在事件上离开关键部分Wait
我希望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的雇员.我不认为这会改变这段代码的实用性/适用性,也不会导致您从源代码中提取代码的收入.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读