Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@7117 48e7efb5...
[simgrid.git] / src / bindings / ruby / RubySem.rb
1 class Sem
2   
3   
4   attr_accessor :permits, :mutex, :cv
5   
6   Thread.abort_on_exception = true
7   
8
9   
10 #   Initialize
11   def initialize ( permits )
12     
13     @permits = permits
14     @mutex = Mutex.new
15     @cv = ConditionVariable.new
16     
17   end
18   
19   
20   
21 #   Aquire
22   def acquire()
23     
24     if(!Thread.current.alive?)    #Thread.interrupted in Java
25       raise "Exception : Thread Interrupted"      
26     end
27   
28     mutex.synchronize {
29       
30       while @permits <= 0 
31     
32         @cv.wait(mutex)   #or Thread.stop ???!!
33        
34     end
35       
36     @permits -=1
37       }
38          
39   end
40   
41   
42   def release()
43     
44     mutex.synchronize {
45       
46       @permits +=1
47       @cv.signal    #Notify ??!!
48       
49       }
50     
51   
52 end