Process 从锁定互斥锁的进程退出会导致死锁吗?

Process 从锁定互斥锁的进程退出会导致死锁吗?,process,mutex,deadlock,Process,Mutex,Deadlock,我一直认为,就像内存一样,一旦进程结束,操作系统有责任在进程结束后进行清理。不幸的是,我很难找到这方面的证据,所以我不能保证会发生什么 我的主要问题是,如果一个进程锁定了一个互斥锁,并且在几乎没有清理的情况下突然退出(即在C中调用abort,或在C++中终止),会发生什么 是否有任何保证操作系统将解锁互斥锁,或者只是暗示了大多数信誉良好的系统将解锁互斥锁(类似于未释放的内存) 如果没有保证,这是否会在仍在运行的进程和死进程持有的锁之间实际创建一个死锁 如果可以通过这种方式创建死锁,是否可以在进

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

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

  • 是否有任何保证操作系统将解锁互斥锁,或者只是暗示了大多数信誉良好的系统将解锁互斥锁(类似于未释放的内存)

  • 如果没有保证,这是否会在仍在运行的进程和死进程持有的锁之间实际创建一个死锁

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


如果互斥对象属于正在退出的进程(通过创建或打开),则其句柄将在进程终止时关闭

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

对于Windows,即
WaitForSingleObject(…)
返回
WAIT\u
,这意味着:

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

对于Linux,即
pthread\u mutex\u lock(…)
返回
EINVAL
,这意味着:


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

多谢各位。我很难在别处找到任何具体细节。