A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
8da1c423bc6da7ee8a5f58521db7ea89dcd2f06f
[simgrid.git]
/
src
/
bindings
/
ruby
/
Semaphore.rb
1
require 'thread'
2
class Semaphore
3
4
5
Thread.abort_on_exception = true
6
7
attr_accessor :permits, :mutex, :cv
8
9
10
11
def initialize ( permits )
12
13
14
@permits = permits
15
@mutex = Mutex.new
16
@cv = ConditionVariable.new
17
18
end
19
20
21
def acquire()
22
23
raise "Interrupted Thread " if (!Thread.current.alive?)
24
@mutex.synchronize {
25
while @permits < 1
26
@cv.wait(mutex)
27
end
28
@permits = @permits - 1
29
}
30
end
31
32
33
def release()
34
@mutex.synchronize{
35
@value = @value + 1
36
@cv.signal
37
38
}
39
40
end
41
42
43
44
45
end