博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】Mutex使用方法(精辟)
阅读量:6841 次
发布时间:2019-06-26

本文共 1374 字,大约阅读时间需要 4 分钟。

Mutex物件的做法与特性如下:

  使用CreateMutex()来产生一个Mutex物件,而传入的Mutex名称字串用以区别不同的Mutex ,也就是说,不管是哪个Process/Thread,只要传入的名称叁数是相同的一个字串,那 CreateMutex()传回值(hMutex, handle of Mutex)会指向相同的一个Mutex物件。这和 Event物件相同。然而Mutex和Event有很大的不同,Mutex有Owner的概念,如果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。

  上面说过,只有拥有该Mutex的Thread在执行WaitForSingleObject()不会停下来,其他的 Thread则会停下来,那其他的Thread如何取得该Mutex的所有权呢?那必需是原先拥有该 Mutex的Thread以ReleaseMutex来放弃所有权,一旦所有权放出来,而有其他的Thread处 於WaitForSingleObject()的停留等待状态,则有一个Thread会即时取得该Mutex的所有权 (上面第2点的说明),所以,若其他的Thread也执行WaitForSingleObject()时,就会处於 等待的状态。正因WaitForSingleObject()会令Mutex处於UnSignal的状态(和Event不同), 所以可以完成同一时问只有一个thread来UpDate共用记忆体的需求(当然大家都要使用Mutex 的规则则来做,即想Update时,要使用WaitForSingleObject()来看看是否可取得Mutex的所 有权。)

  另有一件事要特别提出,如果一个Thread已取得Mutex的所有权,而它呼叫WaitForSingleObject() n 次,则也要使用ReleaseMutex n次才能够将Mutex的拥有权放弃,这和Event也不同,而 且,非Mutex拥有者呼叫ReleaseMutex也不会有任何作用。而每次以WaitForSingleObject 呼叫一次,Mutex会有一个计数器会加一,ReleaseMutex成功会减一,直到Mutex的计数 器为0之後,系统才会将之去除。

本文来自CSDN博客,转载请标明出处:

转载于:https://www.cnblogs.com/lzhitian/archive/2012/11/28/2791884.html

你可能感兴趣的文章
orzdba安装与使用
查看>>
LVS的三种负载均衡技术,八大负载调度算法
查看>>
linux 常用小命令
查看>>
AIX系列------ISO挂载
查看>>
重启citrix服务器,无法打开发布的程序
查看>>
按照文件名中包含的版本号信息对文件名列表进行排序
查看>>
jQuery学习笔记3:过滤器
查看>>
第四课:单用户及救援模式(一)
查看>>
zabbix企业应用:利用自动发现监控IIS站点
查看>>
table 去掉 td之间间距
查看>>
根据status信息对MySQL服务器进行优化-1
查看>>
sui picker,datetimepicker,citypicker代码整理
查看>>
Redis基础教程第2节 Redis和NoSql 介绍与应用场景
查看>>
CentOS6.6下设置grub密码方法
查看>>
Linux下DHCP服务器配置
查看>>
创建数据库恢复
查看>>
一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-使用UDA操纵SQL语句...
查看>>
VS2010与IIS Express
查看>>
jdis操作redis cluster
查看>>
算法学习之路|最小生成树——prime算法
查看>>