62.6.1. Mutex (Mutual Exclusion)

FIXME:

Mechanizmy

#!/usr/bin/env ruby
# $Id: mutex2.rb,v 1.1 2005/10/04 08:52:07 radek Exp $

require 'thread'
mutex = Mutex.new

count1 = count2 = 0
difference = 0
counter = Thread.new do
    loop do
        mutex.synchronize do
            count1 += 1
            count2 += 1
        end
    end
end
spy = Thread.new do
    loop do
        mutex.synchronize do
            difference += (count1 - count2).abs
        end
    end
end
sleep 1
mutex.lock
p count1
p count2
p difference

      
#!/usr/bin/env ruby
# $Id: mutex3.rb,v 1.1 2005/10/04 08:52:07 radek Exp $

require 'thread'
mutex = Mutex.new
cv = ConditionVariable.new

a = Thread.new {
    mutex.synchronize {
	puts "A: I have critical section, but will wait for cv"
	cv.wait(mutex)
	puts "A: I have critical section again! I rule!"
    }
}

puts "(Later, back at the ranch...)"

b = Thread.new {
    mutex.synchronize {
	puts "B: Now I am critical, but am done with cv"
	cv.signal
	puts "B: I am still critical, finishing up"
    }
}

a.join
b.join

      
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .