flock_mutex 1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.rspec +3 -0
- data/README.md +35 -0
- data/lib/flock_mutex.rb +28 -0
- data/spec/flock_mutex_spec.rb +46 -0
- metadata +49 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 888a6f198752055fc6bc7c46e885ebfcc21ac349
|
4
|
+
data.tar.gz: 333e3670b48a3017c70e5930d1a15c32addd6fc6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 27a764e5620944c9caae5c6ca482c923553c52fbeff737758f5ea84c3438ace2712ea11e91aed21da76d09550349ccc712a938b185a3829528caa88e99fcdb79
|
7
|
+
data.tar.gz: a17a64fd1772525f96f64ef497e7e999b7d5695b3f5138dfec103026fd513d7588de730c5f225bd3e9de6b102b91f7de5f5301f399e684db6ffba16a5eede121
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# FlockMutex
|
2
|
+
|
3
|
+
A very simple ruby mutex class using file lock.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
require "flock_mutex"
|
9
|
+
|
10
|
+
mutex = FlockMutex.new("/tmp/test.lock")
|
11
|
+
mutex.lock
|
12
|
+
mutex.unlock
|
13
|
+
mutex.locked?
|
14
|
+
mutex.synchronize {
|
15
|
+
#...
|
16
|
+
}
|
17
|
+
```
|
18
|
+
|
19
|
+
## Examples
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
# my_app.rb
|
23
|
+
|
24
|
+
mutex = FlockMutex.new("/tmp/my_app.lock")
|
25
|
+
|
26
|
+
if mutex.locked?
|
27
|
+
puts "Already running"
|
28
|
+
exit false
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
## Install
|
33
|
+
|
34
|
+
gem install flock_mutex
|
35
|
+
|
data/lib/flock_mutex.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
class FlockMutex
|
2
|
+
def initialize(path)
|
3
|
+
@file = File.open(path, 'a')
|
4
|
+
end
|
5
|
+
|
6
|
+
def lock
|
7
|
+
@file.flock(File::LOCK_EX)
|
8
|
+
self
|
9
|
+
end
|
10
|
+
|
11
|
+
def unlock
|
12
|
+
@file.flock(File::LOCK_UN)
|
13
|
+
self
|
14
|
+
end
|
15
|
+
|
16
|
+
def synchronize
|
17
|
+
lock
|
18
|
+
yield
|
19
|
+
ensure
|
20
|
+
unlock
|
21
|
+
end
|
22
|
+
|
23
|
+
def locked?
|
24
|
+
File.open(@file.path, 'a') do |f|
|
25
|
+
! f.flock(File::LOCK_EX | File::LOCK_NB)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "flock_mutex"
|
2
|
+
|
3
|
+
describe FlockMutex do
|
4
|
+
|
5
|
+
it "test locking" do
|
6
|
+
m1 = FlockMutex.new("test.lock")
|
7
|
+
m2 = FlockMutex.new("test.lock")
|
8
|
+
|
9
|
+
m1.locked?.should be false
|
10
|
+
m2.locked?.should be false
|
11
|
+
|
12
|
+
m1.lock
|
13
|
+
|
14
|
+
m1.locked?.should be true
|
15
|
+
m2.locked?.should be true
|
16
|
+
|
17
|
+
m1.unlock
|
18
|
+
|
19
|
+
m1.locked?.should be false
|
20
|
+
m2.locked?.should be false
|
21
|
+
|
22
|
+
m1.lock
|
23
|
+
|
24
|
+
my_var = 1
|
25
|
+
|
26
|
+
thread = Thread.new do
|
27
|
+
my_var = m2.synchronize { 2 }
|
28
|
+
end
|
29
|
+
|
30
|
+
my_var.should be 1
|
31
|
+
|
32
|
+
m1.unlock
|
33
|
+
|
34
|
+
thread.join
|
35
|
+
|
36
|
+
my_var.should be 2
|
37
|
+
|
38
|
+
m1.locked?.should be false
|
39
|
+
m2.locked?.should be false
|
40
|
+
end
|
41
|
+
|
42
|
+
after do
|
43
|
+
File.delete("test.lock") rescue nil
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
metadata
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flock_mutex
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Benoit MARTIN-CHAVE
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-22 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
- benoitmartinchave@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".gitignore"
|
21
|
+
- ".rspec"
|
22
|
+
- README.md
|
23
|
+
- lib/flock_mutex.rb
|
24
|
+
- spec/flock_mutex_spec.rb
|
25
|
+
homepage: http://github.com/BenoitMC/flock_mutex
|
26
|
+
licenses:
|
27
|
+
- WTFPL
|
28
|
+
metadata: {}
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
requirements: []
|
44
|
+
rubyforge_project:
|
45
|
+
rubygems_version: 2.2.2
|
46
|
+
signing_key:
|
47
|
+
specification_version: 4
|
48
|
+
summary: A very simple ruby mutex class using file lock.
|
49
|
+
test_files: []
|