多线程开发学习笔记之线程同步——互斥量
来源:互联网 发布:斗鱼潮人老杨淘宝 编辑:程序博客网 时间: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);
* @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);
- 多线程开发学习笔记之线程同步——互斥量
- 多线程开发学习笔记之线程同步——信号量
- 多线程开发学习笔记之线程同步——事件
- 多线程开发学习笔记之线程同步——临界区
- java 多线程学习笔记之 线程同步
- 多线程编程学习笔记——线程同步(三)
- C#多线程学习笔记(二)之线程同步
- linux多线程学习笔记三---线程同步之信号量
- Linux程序设计学习笔记----多线程编程线程同步机制之互斥量(锁)与读写锁
- 学习笔记之线程同步
- 多线程学习笔记3:线程同步
- Java线程学习笔记之线程同步
- java多线程之路之线程同步—Core Java学习
- Java6学习笔记59——多线程编程——线程的同步(version 0.2)
- java多线程学习笔记(四) ——线程安全及同步锁问题
- 多线程05:《疯狂Java讲义》学习笔记——线程同步
- iOS学习笔记-103.多线程02——线程状态、同步、通信
- 多线程之线程同步
- ASP.NET 2.0加密Web.config 配置文件 (终极版)
- 外企英语电话面试应急模拟
- 淮上喜会梁州故人
- Ajax原则
- 学习笔记:第17课 进程间的通信
- 多线程开发学习笔记之线程同步——互斥量
- Google Maps API编程资源大全
- Java开源 AJAX框架
- 应聘Java笔试时可能出现问题及其答案(一)
- 对文档库和列表进行的一些基本操作(转)
- Java开源IDE
- 插队,又是插队!
- 应聘Java笔试时可能出现问题及其答案(二)
- 基本数据类型小议