我正在编写一个项目,涉及运行两个并行线程以定期从不同来源提取数据。我在ruby 1.9中使用Threads功能来执行此操作,但不幸的是遇到了死锁问题。此外,我感觉Thread.join
方法导致线程排队而不是并行运行。
我是多线程编程的新手,非常感谢任何建议
干杯
帕特里克
编辑:这两个线程正在访问的共享资源是一个可能是问题的mysql数据库。在运行这些线程的几次迭代之后,僵局就会出现。答案 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实现还不是很完整。 (虽然 稳定,但如果您需要所有功能,则可以使用它。)