
| Current Path : /usr/share/gap/doc/hpc/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : //usr/share/gap/doc/hpc/chap8.txt |
[1X8 [33X[0;0YSemaphores[133X[101X
[1X8.1 [33X[0;0YSemaphores[133X[101X
[33X[0;0YSemaphores are synchronized counters; they can also be used to simulate
locks.[133X
[1X8.1-1 CreateSemaphore[101X
[33X[1;0Y[29X[2XCreateSemaphore[102X( [[3Xvalue[103X] ) [32X function[133X
[33X[0;0YThe function [2XCreateSemaphore[102X takes an optional argument, which defaults to
zero. It is the counter with which the semaphore is initialized.[133X
[4X[32X Example [32X[104X
[4X[25Xgap>[125X [27Xsem := CreateSemaphore(1);[127X[104X
[4X[28X<semaphore 0x1108e81c0: count = 1>[128X[104X
[4X[32X[104X
[1X8.1-2 WaitSemaphore[101X
[33X[1;0Y[29X[2XWaitSemaphore[102X( [3Xsem[103X ) [32X function[133X
[33X[0;0Y[2XWaitSemaphore[102X 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 [2XSignalSemaphore[102X ([14X8.1-3[114X), then decrements the counter and returns.[133X
[4X[32X Example [32X[104X
[4X[25Xgap>[125X [27Xsem := CreateSemaphore(1);[127X[104X
[4X[28X<semaphore 0x1108e81c0: count = 1>[128X[104X
[4X[25Xgap>[125X [27XWaitSemaphore(sem);[127X[104X
[4X[25Xgap>[125X [27Xsem;[127X[104X
[4X[28X<semaphore 0x1108e81c0: count = 0>[128X[104X
[4X[32X[104X
[1X8.1-3 SignalSemaphore[101X
[33X[1;0Y[29X[2XSignalSemaphore[102X( [3Xsem[103X ) [32X function[133X
[33X[0;0Y[2XSignalSemaphore[102X receives a previously created semaphore as its argument. It
increments the semaphore's counter and returns.[133X
[4X[32X Example [32X[104X
[4X[25Xgap>[125X [27Xsem := CreateSemaphore(1);[127X[104X
[4X[28X<semaphore 0x1108e81c0: count = 1>[128X[104X
[4X[25Xgap>[125X [27XWaitSemaphore(sem);[127X[104X
[4X[25Xgap>[125X [27Xsem;[127X[104X
[4X[28X<semaphore 0x1108e81c0: count = 0>[128X[104X
[4X[25Xgap>[125X [27XSignalSemaphore(sem);[127X[104X
[4X[25Xgap>[125X [27Xsem;[127X[104X
[4X[28X<semaphore 0x1108e81c0: count = 1>[128X[104X
[4X[32X[104X
[1X8.1-4 [33X[0;0YSimulating locks[133X[101X
[33X[0;0YIn order to use semaphores to simulate locks, create a semaphore with an
initial value of 1. [2XWaitSemaphore[102X ([14X8.1-2[114X) is then equivalent to a lock
operation, [2XSignalSemaphore[102X ([14X8.1-3[114X) is equivalent to an unlock operation.[133X