On Thu, 16 Nov 2000, hipster wrote:

> Maybe the async producer/consumer example in
> http:/www.xs4all.nl/~hipster/lib/ruby/semaphore is of any use? If you

Yes, that looks good.  It is pretty clear what is going on [and it is
some years since I learned about semaphores! :-)]

Is the following patch necessary, do you think?

neelix hgs 129 %> gdiff -u semaphore.orig semaphore
--- semaphore.orig      Thu Nov 16 13:59:00 2000
+++ semaphore   Thu Nov 16 14:03:03 2000
@@ -60,7 +60,7 @@
                @sem = Semaphore.new 3                  # 3 resources
available
 
                for i in 0..9 do
-                       threads.push Thread.start{ client i }
+                       threads.push Thread.start(i){ |i1| client i1 }
                end
 
                threads.each{ |t| t.join }
neelix hgs 130 %> 

This is on the basis of Programming Ruby page 114, i.e, that the variable
i might change "under the nose of" the call to client.   I suppose it
depends on granularity, and may be a very paranoid approach...

> elect to fork the processes the Semaphore class would have to use IPC
> primitives, of course.
> 
> 	Michel
> 
	Hugh
	hgs / dmu.ac.uk