an abandoned mutex object 是什么意思?

unhappyless 2008-12-16 04:44:01
DWORD WaitForMultipleObjects(


若返回值是 WAIT_OBJECT_0 to (WAIT_OBJECT_0 + nCount– 1)
MSDN 上解释:If bWaitAll is TRUE, the return value indicates that the state of all specified objects is signaled.

若返回值是WAIT_ABANDONED_0 to (WAIT_ABANDONED_0 + nCount– 1)
MSDN 上解释: If bWaitAll is TRUE, the return value indicates that the state of all specified objects is signaled and at least one of the objects is an abandoned mutex object.


an abandoned mutex object 是什么意思?

...全文
325 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzr4304061988012 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xkyx_cn 的回复:]
当拥有Mutex锁的线程死亡时,Mutex变成abandoned状态,其他的等待线程可以获得abandoned mutex。
[/Quote]
up,这个是互斥对象专用的返回值,如果拥有互斥对象的线程在释放对象之前终止(TerminateThread,ExitThread),系统将视为放弃,
在这种情况下,因为不知道资源是否破坏,用户必须自己决定动作。
hhyttppd 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 unhappyless 的回复:]


C/C++ code
//等待数据发送和接收线程退出
DWORD reVal = WaitForMultipleObjects(2, arrThread, TRUE, INFINITE);
if (WAIT_ABANDONED_0 == reVal)
{
int nErrCode = GetLastError();
}


这里等待的是两个线程的句柄,他们怎么会成为 abandoned mutex 呢,没有其他线程拥有这两线程的句柄信号
[/Quote]

如果你等待的是线程,应该不可能会得到WAIT_ABANDONED_0.
unhappyless 2008-12-17
  • 打赏
  • 举报
回复


   //等待数据发送和接收线程退出 
DWORD reVal = WaitForMultipleObjects(2, arrThread, TRUE, INFINITE);
if (WAIT_ABANDONED_0 == reVal)
{
int nErrCode = GetLastError();
}

这里等待的是两个线程的句柄,他们怎么会成为 abandoned mutex 呢,没有其他线程拥有这两线程的句柄信号
hhyttppd 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 unhappyless 的回复:]
那当所有对象都有信号时,且没有一个对象是 abandoned mutex 时,返回WAIT_OBJECT_0

若过一会儿有一个对象是abandoned mutex ,返回WAIT_ABANDONED_0

一个函数只能返回一次值吧?


看到书上的代码:
C/C++ code
//等待数据发送和接收线程退出
DWORD reVal = WaitForMultipleObjects(2, arrThread, TRUE, INFINITE);
if (WAIT_ABANDONED_0 == reVal)
{
int nErrCode = GetLastError();
}



当…
[/Quote]

前几楼关于abandoned mutex的解译是正确的,还可以参考http://msdn.microsoft.com/en-us/library/ms684266.aspx

既然是是已经获得了信号,则认为mutex已被WaitForMultipleObjects得到,除非此线程调用ReleaseMutex,否则其它线程不可能再得到mutex,mutex因而也不可能到
abandoned 状态。另外得到abandoned mutex的返回,本身就是一样不正常的状态。
unhappyless 2008-12-17
  • 打赏
  • 举报
回复
那当所有对象都有信号时,且没有一个对象是 abandoned mutex 时,返回WAIT_OBJECT_0

若过一会儿有一个对象是abandoned mutex ,返回WAIT_ABANDONED_0

一个函数只能返回一次值吧?


看到书上的代码:
	//等待数据发送和接收线程退出
DWORD reVal = WaitForMultipleObjects(2, arrThread, TRUE, INFINITE);
if (WAIT_ABANDONED_0 == reVal)
{
int nErrCode = GetLastError();
}


当调用 WaitForMultipleObjects 时没有对象是 abandoned mutex 那不久出错了
qqlpp 2008-12-16
  • 打赏
  • 举报
回复
up
nullah 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xkyx_cn 的回复:]
当拥有Mutex锁的线程死亡时,Mutex变成abandoned状态,其他的等待线程可以获得abandoned mutex。
[/Quote]
up
xkyx_cn 2008-12-16
  • 打赏
  • 举报
回复
当拥有Mutex锁的线程死亡时,Mutex变成abandoned状态,其他的等待线程可以获得abandoned mutex。
unhappyless 2008-12-16
  • 打赏
  • 举报
回复
这字面上的意思我也看的懂。。。。。。
hhyttppd 2008-12-16
  • 打赏
  • 举报
回复
具体怎么翻译不知道,大概的意思是等待到一个“超时的”(等到信号超时)互斥体对象。
lbh2001 2008-12-16
  • 打赏
  • 举报
回复
an abandoned mutex object的字面意思是
一个废弃的互斥对象
lzr4304061988012 2008-12-16
  • 打赏
  • 举报
回复
一个被抛弃的互斥对象(我E文还可以呐o(∩_∩)o...);
UP

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧