CR的代码文本

all for learning about the world
  订阅 订阅  :: 管理

CRITICAL_SECTION

Posted on 2012-05-23 14:23  mumuliang  阅读(1002)  评论(0编辑  收藏  举报

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函数。