首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >退出锁定互斥对象的进程会导致死锁吗?

问退出锁定互斥对象的进程会导致死锁吗?
EN

Stack Overflow用户
提问于 2012-10-28 16:25:16
回答 1查看 2.7K关注 0票数 5

我一直认为,就像内存一样,操作系统有责任在进程结束后进行清理。不幸的是,我很难找到这方面的很多证据,所以我不能保证会发生什么。

我的主要问题是,如果进程锁定互斥对象,并且突然退出而很少或根本没有清理(即在C中调用abort,或在C++中终止),会发生什么情况?

  • 是否有任何保证操作系统将解锁互斥锁,或者大多数有信誉的系统(类似于未释放内存)只是隐含的?
  • 如果存在无法保证,那么这会在仍在运行的进程和死进程持有的锁之间创建死锁吗?
  • 如果可以这样创建死锁,那么可以在进程的线程之间复制,而不是通过不同进程之间的共享互斥来复制吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-28 17:01:44

如果拥有互斥对象,则为退出进程(通过创建或打开),其句柄将在进程终止时关闭。

其他进程等待操作将在这种情况下返回:

对于Windows,即WaitForSingleObject(...)返回WAIT_ABANDONED,这意味着:

指定的对象是一个互斥对象,在拥有线程结束之前,拥有互斥对象的线程没有释放该互斥对象。将互斥对象的所有权授予调用线程,并将互斥对象状态设置为无信号。如果互斥锁正在保护持久状态信息,则应检查其一致性。

对于Linux,即pthread_mutex_lock(...)返回EINVAL,这意味着:

互斥对象指定的值不引用初始化的互斥对象。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13110661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档