2009-12-03 128 views
0

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

我新的多线程编程和任何意见将不胜感激

干杯

帕特里克

编辑:是,这两个线程访问共享资源是一个MySQL数据库可能是问题。在这些线程正在运行几次迭代之后,死锁就会发生。

+0

嗨帕特里克。你介意发布一些代码给我们看看吗?同时,阅读Pickaxe书中的线程和进程部分可能会有所帮助。 http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_threads.html – jkndrkn 2009-12-03 20:49:27

回答

1

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

+0

我不知道这样的机制。我现在会查看他们的文档。谢谢 – 2009-12-04 13:05:09

1

如果没有更多的细节,诊断可能会出现什么问题是非常困难的,但是死锁(显然)是由多线程试图获取其他人持有的资源引起的。这意味着你必须至少有两个互斥体和两个线程。这可能会发生在你的代码?

Thread.join与并行执行没有任何关系 - 这是一种使一个(通常是主控)线程能够等待一个或多个线程完成的同步方法。

1

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