事件 信号量 临界区 互斥锁

HANDLE CreateEvent(

LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性

BOOL bManualReset,// 复位方式

BOOL bInitialState,// 初始状态 FALSE创建时为未通知状态 TRUE创建时为已通知状态

LPCTSTR lpName // 对象名称

);

bManualReset 为TRUE时,WaitForSingleObject(hEvent, INFINITE)时,hEvent事件变为已通知状态后并不会改变hEvent的状态,即如果有多个线程同时等待hEvent,那么多个线程都会等待hEvent,

我们必须通过ResetEvent函数来手工将事件的状态复原到未通知状态。

 

bManualReset为FALSE时,WaitForSingleObject(hEvent, INFITINE)调用结束后,hEevent的事件会恢复为未通知状态,如果需要其他线程能够得到通知, 需要调用SetEvent函数再次将hEvent的状态变为已通知状态。

 

临界区 互斥锁 一个是内核对象 一个是用户对象

互斥锁 事件 信号量可以跨进程使用

事件当bManualReset置为FALSE时,与互斥锁类似,

当bManualReset置为TRUE时,阻塞的所有线程都会被唤醒

信号量可以通过lInitialCount的值 更加灵活的控制多个线程的同步

 

HANDLE CreateSemaphore(

 LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // 安全属性指针

 LONG lInitialCount, // 初始计数 为0表示不发送信号 IIntialCount <= IMaximumCount

 LONG lMaximumCount, // 最大计数

 LPCTSTR lpName // 对象名指针

);

 

DWORD WaitForSingleObject(

HANDLE hObject;

DWORD dwMilliseconds;

);

 

 

WaitForSingleObject(hSeamphore, INFINITE); //如果 lInitialCount为0 该函数为阻塞 调用该函数会导致 lInitialCount -1

 

BOOL ReleaseSemaphore(

 HANDLE hSemaphore, // 信号量句柄

 LONG lReleaseCount, // 计数递增数量

 LPLONG lpPreviousCount // 先前计数

);

ReleaseSemaphore(hSemaphore, 1, NULL) //调用该函数会导致 lInitialCount -1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值