【线程同步系列2】基于Event的VC++多线程同步

本文介绍了如何在VC++中利用Event进行多线程同步。详细探讨了人工重置和自动重置事件对象的区别,强调在保护代码执行完毕后手动设置自动重置事件为有信号状态的重要性。通过示例说明了错误的同步方式可能导致的问题,并给出了正确的同步实现。

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

事件对象

事件对象也属于内核对象,包含一个使用计数一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。

有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程,且在一个线程得到该事件对象后并不会将该对象设置为非信号状态,也就是说人工重置的事件对象,除非显式得调用ResetEvent,否则始终处于有信号状态。

当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程,同时操作系统将该事件对象设置为非信号状态,当所保护的代码执行完后,需要调用SetEvent设置将该事件对象为信号状态。

创建事件对象

CreateEvent 用来创建或打开一个命名的或无名的事件对象,对于它的其他解释,请自行百科,这里只简单描述它的两种常用用法!

HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codersnote

对学生党 赞赏是鼓励也是鞭策!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值