第九章 线程与内核对象的同步(5)

 

五、互斥对象内核对象

互斥对象内核对象,能够确保线程拥有对单个资源的互斥访问权。互斥对象包含使用计数、线程ID(用于标识系统中的哪个线程当前拥有互斥对象)、递归计数器(用于指明该线程拥有互斥对象的次数)。

互斥对象的行为特性与关键代码段相同,但是互斥对象属于内核对象(不同进程中的多个线程能够访问单个互斥对象,并且线程在等待访问资源时可以设定一个超时值)。而关键代码段则属于用户方式对象。互斥对象的运行速度比关键代码段要慢。

互斥对象内核对象用于保护由多个线程访问的内存块。保证访问内存块的任何线程拥有对该内存块的独占访问权,这样就能够保证数据的完整性。

互斥对象的使用规则:线程ID=0,互斥对象不为任何线程所有,发出通知信号;ID!=0,一个线程拥有互斥对象,不发出互斥信号通知事件;允许互斥对象内核对象使用异常。

1、创建互斥对象内核对象

要使用互斥对象,必须有一个进程首先调用CreateMutex

HANDLE CreateMutex(PSECURITY_ATTRIBUTES psa, BOOL fInitialOwner, PCTSTR pszName)

fInitialOwner设置互斥对象的初始状态,FALSE(通常值)表明互斥对象ID与递归计数器均置为0TRUE表示线程ID设为调用调用线程的ID,递归计数设1

HANDLE OpenMutex(DWORD fdwAccess, BOOL bInheritHandle, PCTSTR pszName)

另一个进程可以通过OpenMutex获得它自己进程与现有互斥对象相关的句柄。

2、释放互斥对象内核对象

BOOL ReleaseMutex(HANDLE hMutex)

调用线程将查看本线程ID与互斥内核对象ID是否一致,是则释放,否则返回FALSEERROR_NOT_OWNER),什么都不做。只有互斥对象能够跟踪哪个线程成功地等待到该对象(其它对象不对此进行跟踪)。

转载于:https://www.cnblogs.com/dyufei/archive/2009/05/30/2573982.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值