临界区结构(CRITICAL_SECTION)的使用

转自:点击打开链接


CRITICAL_SECTION cs;
InitializeCriticalSection(&cs);
EnterCriticalSection(&cs);

在这时,线程被认为「拥有」临界区域对象。两个线程不可以同时拥有同一个临界区域对象,因此,如果一个线程进入了临界区域,那么下一个使用同一临界区域对象呼叫EnterCriticalSection的线程将在函数呼叫中被暂停。只有当第一个线程通过下面的呼叫离开临界区域时,函数才会传回控制权:

LeaveCriticalSection (&cs) ;
DeleteCriticalSection(&cs);

临界区域的一个限制是它们只能用于在同一程序内的线程之间的协调。但是在某些情况下,您需要协调两个不同程序对同一资源的共享(如共享内存等)。在此其况下不能使用临界区域,而需要用互斥对象。

--

hEvent = CreateEvent (&sa, fManual, fInitial, pszName) ;

第一个参数(指向一个SECURITY_ATTRIBUTES结构的指针)和最后一个参数(一个事件对象的名字)只有在事件对象被多个程序共享时才有意义。在同一程序中,这些参数通常被设定为NULL。

如果您希望事件对象被初始化为有信号的,那么将fInitial参数设定为TRUE。

而如果希望事件对象被初始化为无信号的,则将fInitial参数设定为FALSE。

SetEvent (hEvent) ;
ResetEvent (hEvent) ;
WaitForSingleObject (hEvent, dwTimeOut) ;

如果最初的CreateEvent呼叫的fManual参数被设定为FALSE,那么事件对象将在WaitForSingleObject函数传回时自动重置。

这种功能特性通常使得事件对象没有必要使用ResetEvent函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值