我一直认为,就像内存一样,操作系统有责任在进程结束后进行清理。不幸的是,我很难找到这方面的很多证据,所以我不能保证会发生什么。
我的主要问题是,如果进程锁定互斥对象,并且突然退出而很少或根本没有清理(即在C中调用abort,或在C++中终止),会发生什么情况?
发布于 2012-10-28 17:01:44
如果拥有互斥对象,则为退出进程(通过创建或打开),其句柄将在进程终止时关闭。
其他进程等待操作将在这种情况下返回:
对于Windows,即WaitForSingleObject(...)返回WAIT_ABANDONED,这意味着:
指定的对象是一个互斥对象,在拥有线程结束之前,拥有互斥对象的线程没有释放该互斥对象。将互斥对象的所有权授予调用线程,并将互斥对象状态设置为无信号。如果互斥锁正在保护持久状态信息,则应检查其一致性。
对于Linux,即pthread_mutex_lock(...)返回EINVAL,这意味着:
互斥对象指定的值不引用初始化的互斥对象。
https://stackoverflow.com/questions/13110661
复制相似问题