我的程序出现死锁问题。所以我一直在阅读有关锁的信息,但问题是大多数信息不一致或没有平台定义。在递归锁(互斥锁)与非递归锁(互斥锁)中,最被接受的答案是:
因为递归互斥体有归属感,所以抓取互斥体的线程必须是释放互斥体的同一个线程。在非递归互斥锁的情况下,没有所有权感,任何线程通常都可以释放互斥锁,无论哪个线程最初获取互斥锁。在许多情况下,这种类型的“互斥锁”实际上更像是一种信号量操作,您不必将互斥锁用作排除设备,而是将其用作两个或多个线程之间的同步或信号设备。
在评论中人们说这是不正确的,也没有关于它的参考。所以...
1)如果我在线程A中锁定了一个非递归互斥锁。线程B可以在不抓住锁的情况下解锁它吗?
2)如果线程A和线程B调用非递归互斥锁获取锁,线程B会等到锁被释放再获得锁,还是会抛出异常?递归互斥体中的这种情况怎么样?(也在其他无法得出正确结论的问题中讨论)
3)当使用递归锁时,在进程终止时,我所有的递归锁都必须被释放吗?(取决于不会发生的过程结束的地方)
4) 谨慎使用递归锁和非递归锁的组合时,我在看什么问题?
PS:仅使用 windows 平台和std::thread
.