Win32多线程 -- 线程同步之事件(Event)

Event对象被运用在多种类型的高级 I/O 操作中

产生一个event对象

HANDLE CreateEvent(
	LPSECURITY_ATTRIBUTES lpEventAttributes,
	BOOL bManualReset,	// FALSE, 表示这个event将在变成激发状态(因而唤醒一个线程)之后, 自动重置(reset)为非激发状态
					// TRUE, 表示不会自动重置, 必须靠程序操作(调用ResetEvent())才能将激发状态的event重置为非激发状态
	BOOL bInitialState,	// TRUE, event一开始处于激发状态; FALSE, event一开始处于非激发状态
	LPCTSTR lpName		// 对象的名称. 任何线程或进程都可以根据这个名称, 使用这 event
);

如果调用成功, 会传回一个event handle, GetLastError()会传回0. 如果lpName所指定的event对象已经存在, CreateEvent()传回的是该eventhandle, 而不会产生一个新的. 这时候GetLastError()会传回ERROR_ALREADY_EXISTS. 如果 CreateEvent()失败, 传回的是NULL, GetLastError()可以获得更进一步的失败信息

Windows操作系统会强迫让等待中的线程有轮番更替的机会. 对于所有同步机制, 这都是一个重要的行为. 如果操作系统没有强迫实现某种层次的公平性, 可能会有某个线程不断获得执行机会, 而某个线程一直未能获得 CPU 的青睐. 这种情况被称为饥饿(starvation)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值