6
A
回答
2
由於我不知道Java的警告,根據您的意見,我認爲你想要一個條件變量。谷歌的「Ruby條件變量」出現了一堆有用的頁面。 first link I get,似乎是一個很好的快速介紹條件變量特別是,而this看起來像它提供了一個更廣泛的覆蓋Ruby的線程編程。
0
我想你想要的是Thread#join
threads = []
10.times do
threads << Thread.new do
some_method(:foo)
end
end
threads.each { |thread| thread.join } #or threads.each(&:join)
puts 'Done with all threads'
1
有沒有相當於notifyAll的(),但其他兩個是Thread.stop
(停止當前線程)和run
(呼籲停止線程,使其啓動再去)。
+2
我相信ConditionVariable#廣播相當於notifyAll() – finnw 2009-02-12 12:26:26
1
我認爲你正在尋找更像這樣的東西。它會在任何對象實例化後執行。這並不完美,特別是在Thread.stop不在互斥體中的情況下。在java中,等待一個線程,釋放一個監視器。
class Object
def wait
@waiting_threads = [] unless @waiting_threads
@monitor_mutex = Mutex.new unless @monitor_mutex
@monitor_mutex.synchronize {
@waiting_threads << Thread.current
}
Thread.stop
end
def notify
if @monitor_mutex and @waiting_threads
@monitor_mutex.synchronize {
@waiting_threads.delete_at(0).run unless @waiting_threads.empty?
}
end
end
def notify_all
if @monitor_mutex and @waiting_threads
@monitor_mutex.synchronize {
@waiting_threads.each {|thread| thread.run}
@waiting_threads = []
}
end
end
end
7
你在找什麼是Thread
ConditionVariable
:
require "thread"
m = Mutex.new
c = ConditionVariable.new
t = []
t << Thread.new do
m.synchronize do
puts "A - I am in critical region"
c.wait(m)
puts "A - Back in critical region"
end
end
t << Thread.new do
m.synchronize do
puts "B - I am critical region now"
c.signal
puts "B - I am done with critical region"
end
end
t.each {|th| th.join }
相關問題
- 1. 紅寶石程序寶石
- 2. Watir的紅寶石線程
- 3. 紅寶石,等待回調
- 4. 紅寶石重複線程
- 5. 紅寶石線程池
- 6. 紅寶石線程同步
- 7. 紅寶石線程塊?
- 8. 多線程紅寶石
- 9. 什麼是'等'紅寶石的寶石?
- 10. 元編程紅寶石
- 11. CGI編程+紅寶石
- 12. Twitter的紅寶石寶石
- 13. 生日通知紅寶石
- 14. 剖析on Rails應用程序紅寶石/紅寶石
- 15. 線程塊紅寶石主線程1.9
- 16. 紅寶石硒的webdriver等待按鍵
- 17. 紅寶石寶石知名度
- 18. 反相紅寶石
- 19. 紅寶石散列在紅寶石
- 20. 將Java紅寶石
- 21. 的紅寶石
- 22. 錯誤紅寶石寶石
- 23. 紅寶石寶石文檔
- 24. 寶石安裝紅寶石
- 25. 調試寶石紅寶石
- 26. 紅寶石寶石 - LoadError
- 27. 紅寶石寶石LoadError
- 28. 卸載紅寶石寶石
- 29. 安裝紅寶石寶石
- 30. 的setInterval()等效紅寶石
不是真的。連接等待,直到線程完成執行。等待暫停一個線程,直到它被通知,以便它可以恢復執行。 – Geo 2009-02-11 00:32:06
啊。我的錯。我實際上並不知道Java,所以我的猜測失敗了。 – 2009-02-11 00:48:39