Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 Ind
[Top of Book] [Contents] [Previous Chapter] [Next Chapter]

[MathJax off]

8 Semaphores
8.1 Semaphores
8.1-1 CreateSemaphore
8.1-2 WaitSemaphore
8.1-3 SignalSemaphore
8.1-4 Simulating locks

### 8 Semaphores

#### 8.1 Semaphores

Semaphores are synchronized counters; they can also be used to simulate locks.

##### 8.1-1 CreateSemaphore

`‣ CreateSemaphore`( [value] ) | ( function )

The function `CreateSemaphore` takes an optional argument, which defaults to zero. It is the counter with which the semaphore is initialized.

    gap> sem := CreateSemaphore(1);
    <semaphore 0x1108e81c0: count = 1>

##### 8.1-2 WaitSemaphore

`‣ WaitSemaphore`( sem ) | ( function )

`WaitSemaphore` receives a previously created semaphore as its argument. If the semaphore's counter is greater than zero, it decrements the counter and returns; if the counter is zero, it waits until another thread increases it via `SignalSemaphore` (8.1-3), then decrements the counter and returns.

    gap> sem := CreateSemaphore(1);
    <semaphore 0x1108e81c0: count = 1>
    gap> WaitSemaphore(sem);
    gap> sem;
    <semaphore 0x1108e81c0: count = 0>

##### 8.1-3 SignalSemaphore

`‣ SignalSemaphore`( sem ) | ( function )

`SignalSemaphore` receives a previously created semaphore as its argument. It increments the semaphore's counter and returns.

    gap> sem := CreateSemaphore(1);
    <semaphore 0x1108e81c0: count = 1>
    gap> WaitSemaphore(sem);
    gap> sem;
    <semaphore 0x1108e81c0: count = 0>
    gap> SignalSemaphore(sem);
    gap> sem;
    <semaphore 0x1108e81c0: count = 1>

##### 8.1-4 Simulating locks

In order to use semaphores to simulate locks, create a semaphore with an initial value of 1. `WaitSemaphore` (8.1-2) is then equivalent to a lock operation, `SignalSemaphore` (8.1-3) is equivalent to an unlock operation.

[Top of Book] [Contents] [Previous Chapter] [Next Chapter]
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 Ind

generated by GAPDoc2HTML