2009-12-03 130 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實現尚不完整。 (雖然它穩定,所以如果你需要的所有功能都在那裏,你可以使用它。)