必威体育Betway必威体育官网
当前位置:首页 > IT技术

CreateMutex详解

时间:2019-10-24 21:13:20来源:IT技术作者:seo实验室小编阅读:63次「手机版」
 

createmutex

2018-08-03  创建人:Ruo_Xiao
邮箱[email protected]

一、介绍

  • 原型
handle Createmutex(
					LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针
					BOOL bInitialOwner, // 初始化互斥对象的所有者
					LPCTSTR lpName // 指向互斥对象名的指针
				  );

二、功能

  1. 创建一个互斥器,互斥器的名字由 lpName 决定。该名字不要随意,要有独特性,因为跨进程加锁时识别互斥器的方法就是靠该名字。
  2. lpMutexAttributes : 第一个参数表示安全控制,一般直接传入NULL。
  3. bInitialOwner

    (1)若为TRUE,互斥器对象内部会记录创建它的线程的线程ID号并将递归计数设置为1,由于该线程ID非零,所以互斥器处于未触发状态,表示互斥器为创建线程拥有,此时Mutex的状态是无信号的,其他线程中的WaitForSingleObject都将堵塞。

    (2)若为FALSE,那么互斥量对象内部的线程ID号将设置为NULL,递归计数设置为0,这意味互斥器不为任何线程占用,处于触发状态。

    也就是说,只有当递归计数为0时,该互斥器才属于触发状态,即:解锁。

  4. 创建成功,则返回互斥器的句柄,否则返回0。

三、其他

  1. 互斥器是一个系统核心对象,所以有安全描述指针,用完了要 CloseHandle 关闭句柄,这些是内核对象的共同特征;
  2. ID用于标识系统中的哪个线程当前拥有互斥对象,递归计数器用于指明该线程拥有互斥对象的次数。
  3. waitforSingleObject 和 releasemutex(hMutex);配合使用。

    栗子:

//加锁
WaitForSingleObject(hMutex, INFINITE);  //还有其它函数可用, 详见MSDN中说明

//这里写被加锁的东西.  一般是操作一些共享数据(占用系统内存)。


//解锁,互斥器递归计数-1。
ReleaseMutex(hMutex);

(SAW:Game Over!)

文章最后发布于: 2018-08-03 10:29:51

相关阅读

CreateMutex创建互斥内核对象

http://blog.sina.com.cn/s/blog_149e9d2ec0102wyr0.html在编程中我们常使用程序创建一个互斥的内核对象,目的就是为了让这个程序

CreateMutex、WaitForSingleObject、ReleaseMutex——

CreateMutexCreateMutex作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。互斥对象是系统内核维护的一

分享到:

栏目导航

推荐阅读

热门阅读