Ruby线程死锁

时间:2009-12-03 20:35:07

标签: ruby concurrency multithreading deadlock

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

我是多线程编程的新手,非常感谢任何建议

干杯

帕特里克

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

3 个答案:

答案 0 :(得分:1)

您可以使用来自标准库的Mutex,Monitor,Queue,SizedQueue等同步机制。或使用它们的问题?

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您使用的是哪种Ruby 1.9实现? YARV无法并行运行Ruby Threads。目前,还没有可以生成就绪的Ruby 1.9实现,它可以并行运行线程。 JRuby可以并行线程,但它的Ruby 1.9实现还不是很完整。 (虽然 稳定,但如果您需要所有功能,则可以使用它。)