多线程开发学习笔记之线程同步——互斥量

来源:互联网 发布:斗鱼潮人老杨淘宝 编辑:程序博客网 时间:2024/05/22 11:59

        上次简单学习了一下临界区,感觉有些自我陶醉,呵呵。今天就能加点难度(相对来说)——互斥量。互斥量的用途和临界区很像。它与临界区的差别在于可以跨线程使用,可以用来同步进行多个线程间的数据访问,但是是以牺牲速度为代价的。前面说过了,只有临界区是非核心对象,那么互斥量就是一个核心对象了。核心对象的特点是有所谓的引用计数。所著一个未被拥有的互斥量,比锁住一个未被拥有的临界区需要花费几乎100倍的时间(数据引用自《Visual C++ 6.0编程学习捷径》)。

        Win32 API有一套互斥量的支持函数:

/** / brief 创建互斥量.
 * @param lpMutexAttributes 指定安全属性,NULL表示使用默认的属性.
 * @param bInitialOwner 指出创建互斥量的线程是否要成为该互斥量的最初拥有.
 *              TRUE表示拥有,因此互斥量将处于无信号状态.
 *              FALSE表示互斥量不被任何现成拥有,因此处于有信号状态.
 * @param lpName为NULL或标识该互斥量的一个字符串的地址,任何进程或线程都可以根据此名称使用该互斥量.
 *           当应用程序调用CreateMutex()函数时,系统分配一个互斥量的核心对象,把它的名字设为lpName所致的字符串.
 *          该名字在进程间共享互斥量。CreateMutex()返回一个标识新互斥量对象的进程相关的句柄.
 
*/

HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, 
                                            LPCTSTR lpName);

/** / brief 打开互斥量.
 * @param dwDesiredAccess 可设置为MUTEX_ALL_ACCESS或SYNCHRONIZE.
 * @param bInheritHandle 指出该进程创建的子进程能否继承该互斥量.
 * @param lpName 指定互斥量的名字.
 
*/

HANDLE OpenMutex(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName);

/** / brief 释放互斥量.
 * @param hMutex 要释放的互斥量的句柄.
 
*/

BOOL ReleaseMutex(HANDLE hMutex);

 

 

 

原创粉丝点击