>>>>> "Y" == Yukihiro Matsumoto <matz / netlab.co.jp> writes:

Y> No, File#flock is based on system call flock(2), which does not aware
Y> of Ruby's threads.  For thread synchronization, use Mutex.

 I don't understand this case :

pigeon% cat b.rb
#!/usr/bin/ruby
def toto(message)
    begin
        f = open("toto1", "w")
        f.flock(File::LOCK_EX)
        p "#{message} with lock"
        sleep 3
    ensure
        f.close
        p "#{message} finish"
    end
end

t1 = Thread.new {
    toto("First Thread")
}
t2 = Thread.new {
    toto("Second Thread")
}
t1.join
t2.join
pigeon% b.rb
"First Thread with lock"
"First Thread finish"
"Second Thread with lock"
"Second Thread finish"
pigeon% 


Guy Decoux