Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 Ind

### 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.

Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 Ind

generated by GAPDoc2HTML