36 lines
		
	
	
	
		
			892 B
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			892 B
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
| DEFINITION MODULE Processes;
 | |
| (*
 | |
|   Module:	Processes
 | |
|   From:		"Programming in Modula-2", 3rd, corrected edition, by N. Wirth
 | |
|   Version:	$Header$
 | |
| *)
 | |
| (*
 | |
|   As discussed in "Unfair Process Scheduling in Modula-2", by
 | |
|   D. Hemmendinger, SIGplan Notices Volume 23 nr 3, march 1988,
 | |
|   the scheduler in this module is unfair, in that in some circumstances
 | |
|   ready-to-run processes never get a turn.
 | |
| *)
 | |
| 
 | |
| 	TYPE SIGNAL;
 | |
| 
 | |
| 	PROCEDURE StartProcess(P: PROC; n: CARDINAL);
 | |
| 	(* Start a concurrent process with program "P" and workspace of
 | |
| 	   size "n"
 | |
| 	*)
 | |
| 
 | |
| 	PROCEDURE SEND(VAR s: SIGNAL);
 | |
| 	(* One process waiting for "s" is resumed
 | |
| 	*)
 | |
| 
 | |
| 	PROCEDURE WAIT(VAR s: SIGNAL);
 | |
| 	(* Wait for some other process to send "s"
 | |
| 	*)
 | |
| 
 | |
| 	PROCEDURE Awaited(s: SIGNAL): BOOLEAN;
 | |
| 	(* Return TRUE if at least one process is waiting for sinal "s".
 | |
| 	*)
 | |
| 
 | |
| 	PROCEDURE Init(VAR s: SIGNAL);
 | |
| 	(* Compulsory initialization
 | |
| 	*)
 | |
| END Processes.
 |