EnterCriticalSection

【勇芳软件工作室】汉化Home

EnterCriticalSection函数等待所指定的临界区对象的所有权。当调用线程被授予所有权时,该函数返回。

VOID EnterCriticalSection(

LPCRITICAL_SECTION 【lpCriticalSection】//指向临界区对象的指针
); 

参数

【lpCriticalSection】

指向临界区对象。

返回值

此函数不返回值。

备注

单个进程的线程可以使用关键部分对象进行互斥同步。该过程负责分配关键部分对象使用的内存,该对象可以通过声明CRITICAL_SECTION类型的变量来执行。在使用关键部分之前,进程的一些线程必须调用InitializeCriticalSection函数来初始化对象。

要启用对共享资源的互斥访问,每个线程在执行访问受保护资源的任何代码段之前,调用EnterCriticalSectionTryEnterCriticalSection函数来请求所有关键部分的所有权。不同之处在于TryEnterCriticalSection立即返回,无论是否获得关键部分的所有权,而EnterCriticalSection阻止,直到线程可以拥有关键部分的所有权。执行保护代码后,该线程使用LeaveCriticalSection函数放弃所有权,使另一个线程成为所有者并访问受保护的资源。每次进入临界区时,线程必须调用一次LeaveCriticalSection.每次EnterCriticalSectionTryEnterCriticalSection成功时,线程进入临界区。

线程拥有关键部分后,可以对EnterCriticalSectionTryEnterCriticalSection进行额外调用,而不会阻止其执行。这样可以防止线程在等待已经拥有的关键部分时自身死锁。

进程的任何线程可以使用DeleteCriticalSection函数来释放临时段对象初始化时分配的系统资源。调用此函数后,临界区对象不能再用于同步。

也可以看看

DeleteCriticalSection, InitializeCriticalSection, LeaveCriticalSection TryEnterCriticalSection