可以退出锁定互斥锁的进程导致死锁吗?

The*_*ski 5 mutex deadlock process

我一直想象,就像记忆一样,操作系统有责任在一个过程结束后进行清理.不幸的是,我很难找到这方面的证据,所以我无法保证会发生什么.

我的主要问题是,如果一个进程正在锁定一个互斥锁会发生什么情况,它会在很少或没有清理的情况下突然退出(即在C中调用abort,或者在C++中终止)?

  • 是否保证操作系统将解锁互斥锁,或者只是暗示大多数信誉良好的系统会(类似于未发布的内存)?

  • 如果没有保证,这是否真的会在仍在运行的进程和死进程持有的锁之间造成死锁

  • 如果可以通过这种方式创建死锁,是否可以在进程的线程之间复制,而不是通过单独进程之间的共享互斥锁?

Arn*_*rno 5

如果互斥对象属于现有进程(通过create或open),则在终止进程时将关闭其句柄.

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

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

指定的对象是在拥有线程终止之前由拥有互斥对象的线程未释放的互斥对象.互斥对象的所有权被授予调用线程,并且互斥锁状态被设置为无信号.如果互斥锁正在保护持久状态信息,则应检查它是否一致.

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

mutex指定的值不是指初始化的互斥对象.