在多线程程序设计中,不可避免地面临着同步问题。在Win32中,有以下四种同步机制。
1、临界区 - Critical Section
(1) 说明
多线程程序中,有些代码是共享资源,需将这些代码作为临界区。如果有多个线程试图同时访问临界区,那么在一个线程进入后,其他线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占。
临界区的同步速度很快;不是内核对象,因而不能跨进程同步;不能指定阻塞时的等待时间(只能无限等待下去)。
(2) 有关函数
操作临界区要涉及的API函数有:
InitializeCriticalSection()
EnterCriticalSection()
LeaveCriticalSection()
DeleteCriticalSection()
这四个函数的形参都是一个指向CRITICAL_SECTION结构体的指针,因而必须先定义一个CRITICAL_SECTION类型的变量。
InitializeCriticalSection()的作用是初始化一个临界资源对象;EnterCriticalSection()的作用是查看CRITICAL_SECTION结构成员变量的值,判断是否有线程访问临界区的资源。如果没有,则更新CRITICAL_SECTION结构成员变量的值,并将当前的线程赋予资源访问权;如果有线程正在访问临界区的资源,则该函数将线程置为等待状态;LeaveCriticalSection()释放临界区资源的所有权,使其他等待临界区资源的线程能够有机会获得临界区资源的所有权。