Semaphores are synchronized counters; they can also be used to simulate locks.
‣ 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>
‣ 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>
‣ 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>
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.
generated by GAPDoc2HTML