【问题标题】:Ruby threading deadlocksRuby 线程死锁
【发布时间】:2009-12-04 21:09:29
【问题描述】:

我目前正在编写一个项目,该项目涉及运行两个并行线程以定期从不同来源提取数据。我正在使用 ruby​​ 1.9 中的线程功能来执行此操作,但不幸的是遇到了死锁问题。另外我感觉Thread.join 方法导致线程排队而不是并行运行。

我是多线程编程的新手,任何建议都将不胜感激

干杯

帕特里克

编辑:这两个线程正在访问的共享资源是一个 mysql 数据库,这可能是问题所在。在运行这些线程的几次迭代后出现死锁。

【问题讨论】:

标签: ruby concurrency multithreading deadlock


【解决方案1】:

您可以使用标准库中的 Mutex、Monitor、Queue、SizedQueue 等同步机制。还是使用有问题?

【讨论】:

  • 我不知道这种机制。我现在将查看他们的文档。谢谢
【解决方案2】:

如果没有更多细节,很难诊断出可能出现的问题,但死锁(显然)是由多个线程试图获取其他线程所持有的资源引起的。这实际上意味着您必须至少有两个互斥锁和两个线程。这可能发生在您的代码中吗?

Thread.join 与并行执行没有任何关系——它是一种同步方法,可以让一个(通常是主)线程等待一个或多个线程完成。

【讨论】:

    【解决方案3】:

    您使用的是哪种 Ruby 1.9 实现? YARV 不能并行运行 Ruby 线程。目前,没有可以并行运行线程的 Ruby 1.9 的生产就绪实现。 JRuby 可以并行线程,但它的 Ruby 1.9 实现还不够完整。 (虽然它稳定的,所以如果你需要的所有功能都在那里,你可以使用它。)

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 1970-01-01
      • 2010-09-10
      • 2018-06-16
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多