读书人

是否需要ReleaseMutex释放HMutex所有权

发布时间: 2012-03-04 11:13:33 作者: rapoo

是否需要ReleaseMutex释放HMutex所有权

WaitReturn:=WaitForSingleObject(HMutex,0)
检查互斥对象HMutex的状态代码如下:
WaitReturn:=WaitForSingleObject(HMutex,0) //超时设置为0,只检查HMutex是否处于发信号状态
if WaitReturn=Wait_Object_0 then //处于发信号状态
begin
...
...
ReleaseMutex(HMutex); // //?????此处是否需要ReleaseMutex? 释放HMutex所有权
end
else if WaitReturn=Wait_TimeOut then //超时
begin
...
...
ReleaseMutex(HMutex); // //?????此处是否需要ReleaseMutex? 释放HMutex所有权
end
else if WaitReturn=Wait_Abandoned then //拥有该互斥对象的线程未释放此对象的所有权之前就已终止
begin
...
...
ReleaseMutex(HMutex); //?????此处是否需要ReleaseMutex? 释放HMutex所有权
end;



[解决办法]
ReleaseMutex只有在该线程拥有互斥对象时,才能生效。

一个线程与一个互斥对象建立拥有关系,有两种方式:1、创建互斥对象时,传入 设置参数bInitialOwner ;2、使用wait函数,等待获取;

WaitForSingleObject 只有在互斥对象有信号时,才使线程拥有这个互斥对象。所以Wait_TimeOut 不必释放
[解决办法]
此处是否需要ReleaseMutex? 释放HMutex所有权
---------------------------
Wait_Object_0 后都需要 ReleaseMutex, 来释放互斥所有权的

if WaitReturn=Wait_Abandoned then //拥有该互斥对象的线程未释放此对象的所有权之前就已终止
如果某个线程未释放互斥对象的所有权就已终止,那其它线程是永远无法再获得该互斥对象的所有权了??
----------------------------
Wait_Abandoned 是互斥对象已经失效了,应该是不需要 ReleaseMutex



读书人网 >.NET

热点推荐