目前我正在写一个项目,其中包括运行两个并行线程,以定期从不同的来源拉取数据。我正在使用Ruby1.9中的线程功能来做这件事,但不幸的是我遇到了死锁问题。我还有一种感觉,Thread.join方法导致线程排队,而不是并行运行。
我是多线程编程的新手,任何建议都将不胜感激
干杯
帕特里克
编辑:这两个线程正在访问的共享资源是mysql数据库,这可能是问题所在。在运行这些线程的几次迭代之后,死锁就会出现。
发布于 2009-12-04 05:00:46
您可以使用来自标准库的同步机制,如互斥、监视器、队列、SizedQueue。还是在使用它们时有问题?
发布于 2009-12-04 06:40:33
在没有更多细节的情况下,很难诊断出哪里出了问题,但死锁(显然)是由多个线程试图获取其他线程持有的资源引起的。这实际上意味着您必须至少有两个互斥锁和两个线程。这会在你的代码中发生吗?
Thread.join与并行执行没有任何关系--它是一种同步方法,可以让一个线程(通常是主线程)等待一个或多个线程完成。
发布于 2009-12-04 06:55:15
您使用的是哪个Ruby 1.9实现?YARV不能并行运行Ruby线程。目前,还没有可以并行运行线程的Ruby1.9的生产就绪实现。JRuby可以并行处理线程,但是它的Ruby1.9实现还不是很完整。(虽然它是稳定的,所以如果您需要的所有功能都在那里,您就可以使用它。)
https://stackoverflow.com/questions/1842738
复制相似问题