Linux程序员通常喜欢用文件锁来做进程间的同步,或简单地用文件锁指示程序进程是否还健在。在ruby里面可以很简单的实现文件锁:
=begin
file lock for inter-process sync.
usage:
FSLock('mylock') do
# protected by lock,
# do your job here ...
end
=end
class FSLock
def initialize(name=nil)
name ||= 'global'
@fname = name + '.lock'
if block_given?
lock()
yield
unlock()
end
end
def critical
lock()
yield() if block_given?
unlock()
end
def lock
@f = File.new(@fname, "ab")
@f.flock(File::LOCK_EX) if @f
end
def unlock
@f.close if @f
end
end
测试代码:
if $0 == __FILE__
unless fork
# child process
3.times do |i|
FSLock.new('/tmp/myapp') do
sleep 2 # child process sleep while holding the lock
puts "#{Time.now.to_s}: Ping !"
end
end
else
# parent process
sleep 0.1
6.times do
FSLock.new('/tmp/myapp') do # parent process will be blocked while child holding the lock
puts "#{Time.now.to_s}: Pong !"
end
sleep 0.1
end
Process.wait
end
end
父子进程通过文件锁来同步,子进程持有锁后休眠2秒导致父进程企图获取锁时休眠。最后子进程不在持有锁的时候,父进程不再block。
Win32用户可以在Cygwin下运行此代码。
分享到:
- 2007-12-29 11:44
- 浏览 1914
- 评论(2)
- 论坛回复 / 浏览 (2 / 2896)
- 查看更多
相关推荐
赠送jar包:simple-xml-safe-2.7.1.jar; 赠送原API文档:simple-xml-safe-2.7.1-javadoc.jar; 赠送源代码:simple-xml-safe-2.7.1-sources.jar; 赠送Maven依赖信息文件:simple-xml-safe-2.7.1.pom; 包含翻译后...
simpleDemo-release.apk.1
2019-CVPR-A Simple Pooling-Based Design for Real-Time Salient Object Detection-PoolNet. 基于池化技术的显著性目标检测-网文-rrrr1
simpleaudio-1.0.4-cp310-cp310-win_amd64
赠送jar包:sentinel-transport-simple-http-1.8.0.jar; 赠送原API文档:sentinel-transport-simple-http-1.8.0-javadoc.jar; 赠送源代码:sentinel-transport-simple-http-1.8.0-sources.jar; 赠送Maven依赖信息...
simple-xml-safe-2.7.1.jar
SimpleITK-1.2.4-cp39-cp39-win_amd64
AppLocker - simple lock screen for iOS Application.zip,AppLocker - simple lock screen for iOS Application ( Swift 4+, iOS 9.0+) Touch ID / Face ID
simpleaudio-1.0.4-cp38-cp38-win_amd64
jcaptcha-integration-simple-servlet-sample.jar 验证码, jcaptcha组件,验证码项目
simpleaudio-1.0.4-cp310-cp310-win32
simpleaudio-1.0.4-cp39-cp39-win32
Simple People - Cartoon Characters v1.22和Simple Port - Cartoon Assets v1.0场景
赠送jar包:cxf-rt-frontend-simple-3.0.1.jar; 赠送原API文档:cxf-rt-frontend-simple-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-frontend-simple-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-frontend-...
A Simple In-Place Algorithm for In-Shuffle
A Simple State-Based Prognostic Model for Railway Turnout Systems 一个简单的基于状态的铁路道岔系统预测模型
simpleaudio-1.0.2-cp34-cp34m-win_amd64
SimpleITK-1.2.4-cp38-cp38-win_amd64
15 A simple event-based PID controller.pdf
simpleaudio-1.0.4-cp36-cp36m-win_amd64