我一直想象,就像记忆一样,操作系统有责任在一个过程结束后进行清理。不幸的是,我很难找到很多证据,所以我无法保证会发生什么。
我的主要问题是,如果进程锁定互斥锁会发生什么情况,并且在很少或没有清理的情况下突然退出(即在C中调用abort,或在C ++中终止)?
是否有任何保证操作系统会解锁互斥锁,或者只是隐含大多数信誉良好的系统(类似于未发布的内存)?< / p>
如果无保证,这是否会在仍在运行的进程与死进程持有的锁之间实际创建死锁?
如果可以通过这种方式创建死锁,是否可以在进程的线程之间复制,而不是通过单独进程之间的共享互斥锁进行复制?
答案 0 :(得分:5)
如果互斥对象属于现有进程(通过create或open),则句柄将在终止进程时关闭。
其他进程等待操作将在这样的情况下返回:
对于Windows,即WaitForSingleObject(...)
返回WAIT_ABANDONED
,这意味着:
指定的对象是在拥有线程终止之前由拥有互斥对象的线程未释放的互斥对象。互斥对象的所有权被授予调用线程,并且互斥锁状态被设置为无信号。如果互斥锁正在保护持久状态信息,则应检查其是否一致。
对于Linux,即pthread_mutex_lock(...)
返回EINVAL
,这意味着:
mutex指定的值不是指初始化的互斥对象。