我在程序中遇到了死锁的问题.所以我一直在阅读关于锁的问题,但问题是大多数信息是不一致的或不是平台定义的.在递归锁定(Mutex)与非递归锁定(Mutex)中,最常被接受的答案是:
由于递归互斥锁具有所有权感,因此获取互斥锁的线程必须与释放互斥锁的线程相同.在非递归互斥锁的情况下,没有所有权感,任何线程通常都可以释放互斥锁,无论哪个线程最初使用互斥锁.在许多情况下,这种类型的"互斥体"实际上更像是一种信号量动作,您不必将互斥体用作排除设备,而是将其用作两个或多个线程之间的同步或信号设备.
在评论中,人们说这是不正确的,没有关于它的参考.所以...
1)如果我在线程A中锁定非递归互斥锁.线程B可以解锁它而不需要锁定吗?
2)如果在线程A和线程B调用获取锁定的非递归互斥锁中的锁定中,线程B将等待直到锁定被释放以获得锁定还是会抛出异常?这个案例在递归互斥体中怎么样?(在其他问题中也讨论过,不能得出正确的结论)
3)当使用递归锁时,在进程终止时,是否必须释放所有递归锁?(取决于流程结束的地方,不会发生)
4)在谨慎使用递归锁和非递归锁的组合时,我看到了哪些问题?
PS:仅使用Windows平台和std::thread.
尝试了大多数属性,并没有设法完全禁用visual studio中的复选框的焦点.有谁知道怎么做?
我正在使用System.Windows.Forms.CheckBox对象.我使用图像作为背景,当CheckBox处于聚焦状态时,绘制边框,这使得背景图像看起来非常糟糕.所以我想摆脱它......
编辑:添加图片以澄清此问题的意图......

用户可以点击"TAB"并单击该对象以将其显示为焦点.这对我来说是个问题,因为它让GUI看起来很糟糕.