| (* Library module defined by the International Standard |
| Information technology - programming languages |
| BS ISO/IEC 10514-1:1996E Part 1: Modula-2, Base Language. |
| |
| Copyright ISO/IEC (International Organization for Standardization |
| and International Electrotechnical Commission) 1996-2021. |
| |
| It may be freely copied for the purpose of implementation (see page |
| 707 of the Information technology - Programming languages Part 1: |
| Modula-2, Base Language. BS ISO/IEC 10514-1:1996). *) |
| |
| DEFINITION MODULE Semaphores; |
| |
| (* Provides mutual exclusion facilities for use by processes. *) |
| |
| TYPE |
| SEMAPHORE; |
| |
| PROCEDURE Create (VAR s: SEMAPHORE; initialCount: CARDINAL ); |
| (* Creates and returns s as the identity of a new semaphore that |
| has its associated count initialized to initialCount, and has |
| no processes yet waiting on it. |
| *) |
| |
| PROCEDURE Destroy (VAR s: SEMAPHORE); |
| (* Recovers the resources used to implement the semaphore s, |
| provided that no process is waiting for s to become free. |
| *) |
| |
| PROCEDURE Claim (s: SEMAPHORE); |
| (* If the count associated with the semaphore s is non-zero, |
| decrements this count and allows the calling process to |
| continue; otherwise suspends the calling process until |
| s is released. |
| *) |
| |
| PROCEDURE Release (s: SEMAPHORE); |
| (* If there are any processes waiting on the semaphore s, |
| allows one of them to enter the ready state; otherwise |
| increments the count associated with s. |
| *) |
| |
| PROCEDURE CondClaim (s: SEMAPHORE): BOOLEAN; |
| (* Returns FALSE if the call Claim(s) would cause the calling |
| process to be suspended; in this case the count associated |
| with s is not changed. Otherwise returns TRUE and the |
| associated count is decremented. |
| *) |
| |
| END Semaphores. |
| |