4
我有一個Ruby文件中的函數,寫入一個文件這樣製作寫入文件線程安全
File.open("myfile", 'a') { |f| f.puts("#{sometext}") }
調用此功能在不同的線程,使得文件寫入如上面不是線程安全。有沒有人有任何想法如何以最簡單的方式使這個文件寫入線程安全?
更多信息:如果有關係,我使用rspec框架。
我有一個Ruby文件中的函數,寫入一個文件這樣製作寫入文件線程安全
File.open("myfile", 'a') { |f| f.puts("#{sometext}") }
調用此功能在不同的線程,使得文件寫入如上面不是線程安全。有沒有人有任何想法如何以最簡單的方式使這個文件寫入線程安全?
更多信息:如果有關係,我使用rspec框架。
你可以給通過File#flock
File.open("myfile", 'a') { |f|
f.flock(File::LOCK_EX)
f.puts("#{sometext}")
}
鎖參考:http://blog.douglasfshearer.com/post/17547062422/threadsafe-file-consistency-in-ruby
def lock(path)
# We need to check the file exists before we lock it.
if File.exist?(path)
File.open(path).flock(File::LOCK_EX)
end
# Carry out the operations.
yield
# Unlock the file.
File.open(path).flock(File::LOCK_UN)
end
lock("myfile") do
File.open("myfile", 'a') { |f| f.puts("#{sometext}") }
end