33 lines
		
	
	
	
		
			851 B
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			851 B
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
DEFINITION MODULE Semaphores;
 | 
						|
(*
 | 
						|
  Module:	Processes with semaphores
 | 
						|
  Author:	Ceriel J.H. Jacobs
 | 
						|
  Version:	$Id$
 | 
						|
 | 
						|
  On systems using quasi-concurrency, the only opportunities for process-
 | 
						|
  switches are calls to Down and Up.
 | 
						|
*)
 | 
						|
 | 
						|
  TYPE Sema;
 | 
						|
 | 
						|
  PROCEDURE Level(s: Sema) : CARDINAL;
 | 
						|
  (* Returns current value of semaphore s *)
 | 
						|
 | 
						|
  PROCEDURE NewSema(n: CARDINAL) : Sema;
 | 
						|
  (* Creates a new semaphore with initial level "n" *)
 | 
						|
 | 
						|
  PROCEDURE Down(VAR s: Sema);
 | 
						|
  (* If the value of "s" is > 0, then just decrement "s".
 | 
						|
     Else, suspend the current process until the semaphore becomes
 | 
						|
     positive again.
 | 
						|
  *)
 | 
						|
 | 
						|
  PROCEDURE Up(VAR s: Sema);
 | 
						|
  (* Increment the semaphore "s".
 | 
						|
  *)
 | 
						|
 | 
						|
  PROCEDURE StartProcess(P: PROC; n: CARDINAL);
 | 
						|
  (* Create a new process with procedure P and workspace of size "n".
 | 
						|
     Also transfer control to it.
 | 
						|
  *)
 | 
						|
END Semaphores.
 |