如何让线程解锁被另一个线程锁定的互斥锁?

时间:2015-11-21 17:54:57

标签: ruby mutex

我有几个线程和一个互斥锁。一个线程可以锁定这个互斥锁,我想要另一个线程解锁这个互斥锁,但是抛出了以下错误:

e.ToString()

如何忽略此错误?或者有其他解决方案?

修改

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

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

2 个答案:

答案 0 :(得分:0)

Mutex是互斥的缩写。这意味着当一个线程获取作业并锁定其互斥锁时,其他线程不应该触及它,实际上应该被阻塞,直到互斥锁被释放(由锁定它的线程) )。

由于您似乎希望同时使用多个线程来操作,我不知道您尝试使用互斥锁做什么。在您澄清用例之前,我无法为您提供适当的替代方案。 : - (

答案 1 :(得分:0)

实现抢救ThreadError for block,解锁Mutex,如下所示:

begin
    m.unlock
rescue ThreadError => e
    puts "Nothing todo"
end

但请注意:ThreadError可能会因其他与线程相关的操作而引发。 你必须保证救援不会导致程序逻辑崩溃。