2014-03-19 157 views
0

我有一个多线程应用程序。我有三个共享资源。不同的线程会同时调用这些资源。我需要为此提供一个互斥体。一个互斥体是否足够了,还是应该为每个资源创建一个互斥体?使用多个互斥锁时会加速吗?Ruby和互斥体

+0

没有一个线程一次只需要多个资源? –

+0

不,一次线程需要一个资源 –

回答

1

如果资源独立于彼此,没有理由使用单个互斥锁来保护它们。您将会挨饿其他可以安全使用的资源的访问线程。

如果可能,请为每个资源使用一个互斥锁。

性能 - 访问共享资源的线程更有可能在独立保护资源的情况下执行得更好,而不是拥有单个共享Mutex - 但这取决于比这更多的因素。

+0

如果线程一次需要获取多个资源,我怀疑OP是否担心死锁? –

+0

在这种情况下[Dining Philosophers](https://en.wikipedia.org/wiki/Dining_philosophers_problem)问题适用,他需要确保线程始终以相同顺序获取和释放资源上的锁。 – mcfinnigan