Windows同步对象Event和Linux的条件变量

本文探讨了Windows下的Event同步对象与Linux的条件变量Condition Variable的相似性和差异。Event分为自动和手动模式,提供了多种同步机制。条件变量则在等待基础上结合了等待条件,可以通过signal和broadcast操作。尽管两者在某些方面相似,但在模拟条件变量时,Event存在局限性,因为不能同时具备两种模式。作者提到了模拟条件变量的一些挑战,并暗示后续将详细讨论这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。

1 Windows同步对象Event

微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一贯的作风,有些地方设计的又有点怪异。Event通过函数CreateMutex创建,可以分为手动模式和自动模式两种模式,两种模式下表现迥异。和其他同步对象一样,在WaitForSingleObject或者WaitForMultipleObjects等待激发。激发(取消激发)法有3个函数SetEvent,ResetEvent,PulseEvent根据模式不同给出说明如下表:

 

自动模式

手动模式

SetEvent

放过一个等待线程,

将Event调为激发态,放过一个等待线程,而后自动调回非激发态

一直放过等待

将Event调为激发态,

ResetEvent

无用

停止放过线程

将Event调为非激发态

PulseEvent

一次放过一个等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值