【问题标题】:Ruby and mutexes红宝石和互斥锁
【发布时间】:2014-03-19 10:54:57
【问题描述】:

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

【问题讨论】:

  • 没有一个线程一次需要多个资源?
  • 不,一个线程一次需要一个资源

标签: ruby multithreading mutex


【解决方案1】:

如果资源彼此独立,则没有理由用一个 Mutex 来保护它们。您将让其他线程无法访问他们可以安全使用的资源。

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

wrt 性能 - 如果资源受到独立保护而不是拥有一个共享的 Mutex,则访问共享资源的线程更有可能表现良好 - 但它取决于更多的因素而不仅仅是这个。

【讨论】:

  • 如果线程一次需要获取多个资源,我怀疑 OP 担心死锁?
  • 在这种情况下,Dining Philosophers 问题适用,他需要确保线程始终以相同的顺序获取和释放资源锁。