Java yöntemlere Ruby'nin alternatifleri ne olduğunu bilmek istiyorum bildirmek:yakut iplik programlama, java bekleme yakut eşdeğer// notifyAll
- bildirmek
- beklemek
- notifyAll
Lütfen küçük bir snippet veya bazı bağlantılar gönderebilir misiniz?
Java yöntemlere Ruby'nin alternatifleri ne olduğunu bilmek istiyorum bildirmek:yakut iplik programlama, java bekleme yakut eşdeğer// notifyAll
Lütfen küçük bir snippet veya bazı bağlantılar gönderebilir misiniz?
Java'yı bilmediğim uyarıyla, yorumlarınıza dayanarak bir koşul değişkeni istediğinizi düşünüyorum. Google'ın "Ruby koşul değişkeni" için yararlı sayfalardan oluşan bir grup geliyor. first link I get, özellikle var olan koşullara hızlı bir şekilde girerken, this, Ruby'de dişli programlamanın çok daha geniş bir kapsamını veriyor gibi görünüyor.
Ben ne istediğini var notifyAll() için eşdeğer, ama diğer iki Thread.stop
olan 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'
değil. Bir iş parçacığı yürütmeyi tamamlayana kadar bekler. Bekleyin, bildirilene kadar bir iş parçacığını duraklatır, böylece yürütmeye devam edebilir. – Geo
Ah. Benim hatam. Aslında Java'yı bilmiyorum, böylece vahşi tahminim başarısız oldu. –
olduğunu düşünüyorum başlamak yapmak için durdurulmuş parçacığı üzerinde denir ve run
((cari parçacığı durdurur) tekrar gidiyor).
ConditionVariable # yayınının notifyAll() ile eşdeğer olduğuna inanıyorum() – finnw
Sanırım böyle bir şey daha arıyorsun. Bu gerçekleştirildikten sonra başlatılan herhangi bir nesne üzerinde çalışacaktır. Mükemmel değil, özellikle Thread.stop muteks dışındaysa. Java'da, bir iş parçacığı beklerken, bir monitörü serbest bırakır. Aradığınız Ne
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
Thread
yılında ConditionVariable
geçerli: gerçekten
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 }
Java gibi bir şey, ruby'nin sinyal kullandığı ve java'nın kullandığı bildirimler hariç. Teşekkürler ! – Geo