2015-11-21 196 views
0

我有几个线程和一个互斥体。一个线程可以锁定此互斥体,我想另一个线程来解开这个互斥体,但下面的错误被抛出:如何让一个线程解锁另一个线程锁定的互斥锁?

Attempt to unlock a mutex which is locked by another thread 

我怎么能忽略这个错误?或有另一种解决方案?

编辑

我有几个线程,将做的工作。当第一个线程开始工作时,它会锁定互斥锁。其他人可能会出现并开始做同样的工作。在完成作业的最后一个线程(provavelemnte,而不是第一个)之后,它必须解除互斥锁。

因此,第一个线程锁定互斥锁,并且最后一个线程解锁。

+3

这就是互斥体应该如何工作 - 你不能锁定它从一个线程和其他解锁。你是通过使用互斥体试图解决的问题是什么?可能互斥体是不是你的正确选择 –

回答

0

互斥体是互斥排除的简称。这意味着当一个线程接收到作业并锁定其互斥时,其他线程不应该触及它,并且实际上应该被阻塞,直到互斥体被释放(由锁定它的线程)。

由于您似乎想同时在多个线程上工作,所以我不知道您要如何处理互斥锁。在您澄清您的使用案例之前,我无法为您提供适当的替代方案。 :-(

0

实现ThreadError块救援,即解锁Mutex这样的:

​​3210

但要小心:ThreadError可以提高作为 的其他线程相关的操作结果,你一定是舒尔那么救援不会崩溃程序逻辑

+0

或只是'重新锁定'解锁前的互斥:'mutex.lock; mutex.unlock' –

+0

so ...不要重新锁定'Mutex'))它可能是'死锁的原因;递归锁定“,如果你将它重新锁定在类似的线程中。 –

相关问题