Mutex的使用
来源:互联网 发布:数据库备份与恢复 编辑:程序博客网 时间:2024/06/09 16:43
使用互斥量Mutex主要将用到四个函数。下面是这些函数的原型和使用说明。
第一个 CreateMutex
函数功能:创建互斥量(注意与事件Event的创建函数对比)
函数原型:
HANDLECreateMutex(
LPSECURITY_ATTRIBUTESlpMutexAttributes,
BOOLbInitialOwner,
LPCTSTRlpName
);
函数说明:
第一个参数表示安全控制,一般直接传入NULL。
第二个参数用来确定互斥量的初始拥有者。如果传入TRUE表示互斥量对象内部会记录创建它的线程的线程ID号并将递归计数设置为1,由于该线程ID非零,所以互斥量处于未触发状态。如果传入FALSE,那么互斥量对象内部的线程ID号将设置为NULL,递归计数设置为0,这意味互斥量不为任何线程占用,处于触发状态。mutex 有线程所有权的概念,如果Mutex为ThreadA所拥有,那麽ThreadA执行WaitForSingleObject()时,并不会停下来,而会立即传回WAIT_OBJECT_0,而其他的Thread执行WaitForSingleObject()则会停下来,直到Mutex的所有权被Release出来或Time Out。而Thread如何取得Mutex的所有权呢?主要如下:
1.CreateMutex(Byval 0, 1, "MyMutex") 第二个叁数传1进去,则第一个呼叫CreateMutex
且第二个叁数传1的Thread会拥有该Mutex。但如果第二个叁数传0进去,那代表
CreateMutex时,没有人拥有该Mutex。
2.承上的说明,如果Mutex没有拥有者,则第一个呼叫WaitForSingleObject的Thread
会拥有该Mutex。
第三个参数用来设置互斥量的名称,在多个进程中的线程就是通过名称来确保它们访问的是同一个互斥量。
函数访问值:
成功返回一个表示互斥量的句柄,失败返回NULL。
第二个打开互斥量
函数原型:
HANDLEOpenMutex(
DWORDdwDesiredAccess,
BOOLbInheritHandle,
LPCTSTRlpName //名称
);
函数说明:
第一个参数表示访问权限,对互斥量一般传入MUTEX_ALL_ACCESS。详细解释可以查看MSDN文档。
第二个参数表示互斥量句柄继承性,一般传入TRUE即可。
第三个参数表示名称。某一个进程中的线程创建互斥量后,其它进程中的线程就可以通过这个函数来找到这个互斥量。
函数访问值:
成功返回一个表示互斥量的句柄,失败返回NULL。
第三个触发互斥量
函数原型:
BOOLReleaseMutex (HANDLEhMutex)
函数说明:
访问互斥资源前应该要调用等待函数,结束访问时就要调用ReleaseMutex()来表示自己已经结束访问,其它线程可以开始访问了。
最后一个清理互斥量
由于互斥量是内核对象,因此使用CloseHandle()就可以(这一点所有内核对象都一样)。
- Mutex的使用
- Mutex的使用
- 互斥锁(mutex)的使用
- Mutex Object的使用例子
- 互斥量对象(Mutex)的使用
- C# Mutex对象的使用
- C# Mutex对象的使用
- OpenThreads库的使用-Mutex
- 多线程互斥量Mutex的使用
- Mutex使用
- 互斥量(mutex)与事件(event)的使用
- 线程同步技术二:Mutex的使用
- 线程同步之互斥量mutex的使用
- 线程同步之互斥量mutex的使用
- 自旋锁,Mutex和信号量的使用
- linux 线程安全 mutex 锁的使用
- Mutex对象使用时发现的问题
- mutex、condition与pthread_cond_wait()函数的使用
- OutOfMemoryExceptions while remoting very large datasets,由于数据太大无法通过remoting传递
- PhoneApp是什么时候被创建的
- ibatis 调用存储过程多个传入传出参数
- VS05无法跟踪断点
- 邮件客户端雷鸟使用
- Mutex的使用
- 《编程之美:分层遍历二叉树》的另外两个实现
- 老外怎么看待Windows Surface的发布?
- 报错:error LNK2001:unresolved external symbol _WinMain@16
- sql递归查询
- 10个最好的网络硬盘
- 新手入门之——linux版本的选择
- iphone 旋转横屏与竖屏切换view
- 各浏览器对常用或者错误的 Content-Type 类型处理方式不一致