Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Stuks When a process ( Slave ) Tries to Recieve a Task...
[simgrid.git] / src / bindings / ruby / Semaphore.rb
index d8697c5..e087294 100644 (file)
@@ -7,38 +7,44 @@
 #  * This program is free software; you can redistribute 
 #  * it and/or modify it under the terms of the license 
 #  *(GNU LGPL) which comes with this package. 
+require 'msg'
 require 'thread'
 class Semaphore
   
-  Thread.abort_on_exception = true
-  attr_accessor :permits, :mutex, :cv
+   Thread.abort_on_exception = true
+    attr_accessor :permits
+
    
   def initialize ( permits )
     
-      @permits = permits
-      @mutex = Mutex.new
-      @cv = ConditionVariable.new
-    
+       @permits = permits
+
   end
    
 
-  def acquire()
+  def acquire(mutex,cv)
 
     raise "Interrupted Thread " if (!Thread.current.alive?)
-    @mutex.synchronize {
-    while @permits < 1
-       @cv.wait(@mutex)
+    mutex.synchronize {
+    while @permits <= 0
+       
+       cv.wait(mutex)
+       
     end
+    
     @permits = @permits - 1
+    cv.signal
+    
     }
+    
   end
     
-  def release()
-    @mutex.synchronize{
+  def release(mutex,cv)
+    mutex.synchronize{
       
       @permits += 1
-      @cv.signal
-       
+      cv.signal
+           
       }
   end