createmutex
2018-08-03 创建人:Ruo_Xiao
邮箱:[email protected]
一、介绍
- 原型
handle Createmutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针
BOOL bInitialOwner, // 初始化互斥对象的所有者
LPCTSTR lpName // 指向互斥对象名的指针
);
- windows API
二、功能
- 创建一个互斥器,互斥器的名字由 lpName 决定。该名字不要随意,要有独特性,因为跨进程加锁时识别互斥器的方法就是靠该名字。
- lpMutexAttributes : 第一个参数表示安全控制,一般直接传入NULL。
- bInitialOwner
(1)若为TRUE,互斥器对象内部会记录创建它的线程的线程ID号并将递归计数设置为1,由于该线程ID非零,所以互斥器处于未触发状态,表示互斥器为创建线程拥有,此时Mutex的状态是无信号的,其他线程中的WaitForSingleObject都将堵塞。
(2)若为FALSE,那么互斥量对象内部的线程ID号将设置为NULL,递归计数设置为0,这意味互斥器不为任何线程占用,处于触发状态。
也就是说,只有当递归计数为0时,该互斥器才属于触发状态,即:解锁。
- 创建成功,则返回互斥器的句柄,否则返回0。
三、其他
- 互斥器是一个系统核心对象,所以有安全描述指针,用完了要 CloseHandle 关闭句柄,这些是内核对象的共同特征;
- ID用于标识系统中的哪个线程当前拥有互斥对象,递归计数器用于指明该线程拥有互斥对象的次数。
- 和 waitforSingleObject 和 releasemutex(hMutex);配合使用。
栗子:
//加锁
WaitForSingleObject(hMutex, INFINITE); //还有其它函数可用, 详见MSDN中说明
//这里写被加锁的东西. 一般是操作一些共享数据(占用系统内存)。
//解锁,互斥器递归计数-1。
ReleaseMutex(hMutex);
(SAW:Game Over!)
文章最后发布于: 2018-08-03 10:29:51
相关阅读
http://blog.sina.com.cn/s/blog_149e9d2ec0102wyr0.html在编程中我们常使用程序创建一个互斥的内核对象,目的就是为了让这个程序
CreateMutex、WaitForSingleObject、ReleaseMutex——
CreateMutexCreateMutex作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。互斥对象是系统内核维护的一