下:
BOOL ReleaseMutex(
HANDLE hMutex
);
函数中主要参数的意义如下。
? hMutex:Mutex 对象的句柄。
(4)CMutex
Mutex 在MFC 中相应的类是CMutex。CMutex 通过构造函数创建一个互斥器对象。当
某个资源在一个时间只允许一个线程访问的时候,互斥器正好派上用场。
CMutex 只有一个构造函数CMutex::CMutex,它的函数原型如下:
CMutex(
BOOL bInitiallyOwn = FALSE,
LPCTSTR lpszNcom = NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute = NULL
枫叶文学网www.fywxw.com
第9 章 多线程
·241·
);
函数中主要参数的意义如下。
? bInitiallyOwn:指定创建线程是否在CMutex 对象初始创建时访问互斥器控制的资源。
? lpszNcom:CMutex 对象的名称。如果有同名的互斥器存在,如果为空,互斥器就没
有名称。如果和已有的互斥对象同名,构造函数创建一个以存在名称为参考的新的
CMutex 对象。如果名称和已有的其他同步对象同名,构造将失败。
? lpsaAttribute:互斥对象的安全属xìng。
5.信号量(Semaphore)
信号量是最具历史的同步机制。信号量是解决producer/conscomr 问题的关键要素。对应
的MFC 类是CSemaphore。Win32 函数CreateSemaphore()用来产生信号量。ReleaseSemaphore()
用来解除锁定。Semaphore 的现值代表的意义是目前可用的资源数,如果Semaphore 的现值
为1,表示还有一个锁定动作可以成功。如果现值为5,就表示还有5 个锁定动作可以成功。
当调用Wait 等函数要求锁定,如果Semaphore 现值不为0,Wait 马上返回,资源数减1。当
调用ReleaseSemaphore()资源数加1,当时不会超过初始设定的资源总数。
(1)CreateSemaphore
函数CreateSemaphore 用来创建或者打开Semaphore 对象。如果调用成功,函数返回创
建后的对象句柄。如果同名Semaphore 对象在创建之前就已经存在,则函数返回现有的对象
的句柄,并且GetLastError 函数返回ERROR_ALREADY_EXISTS。否则返回创建的Semaphore
对象句柄。如果调用失败,返回空值。它的函数原型如下:
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpNcom