关键部分对象

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

【关键部分】对象提供类似于mutex对象提供的同步,但重要部分对象只能由单个进程的线程使用。事件,互斥和信号量对象也可以在单进程应用程序中使用,但关键部分对象提供了一种稍快一些,更有效的互斥同步机制。像互斥对象一样,一个关键的部分对象一次只能拥有一个线程,这使得它有助于保护共享资源免受同时访问。例如,一个进程可以使用关键部分对象来一次阻止一个以上的线程修改全局数据结构。

该过程负责分配关键部分使用的内存。通常,这是通过简单地声明一个类型为CRITICAL_SECTION的变量来完成的。在进程的线程可以使用它之前,必须使用InitializeCriticalSection函数初始化临界区。

线程使用EnterCriticalSectionTryEnterCriticalSection函数来请求关键部分的所有权。它使用LeaveCriticalSection功能来释放关键部分的所有权。如果临界区对象当前由另一个线程拥有,EnterCriticalSection将无限期等待所有权。相反,当互斥对象用于互斥时,等待功能接受指定的超时间隔。TryEnterCriticalSection功能尝试进入关键部分而不阻止调用线程。

一旦线程拥有关键部分,它可以对EnterCriticalSectionTryEnterCriticalSection进行其他调用,而不会阻止其执行。这样可以防止线程在等待已经拥有的关键部分时自身死锁。要释放其所有权,线程必须在每次进入关键部分时调用LeaveCriticalSection一次。

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

当一个关键的部分对象拥有时,受影响的唯一其他线程是等待对EnterCriticalSection的调用中所有权的那些。不等待的线程可以自由继续运行。