File: semaphores.xml

package info (click to toggle)
gap 4.15.1-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 110,212 kB
  • sloc: ansic: 97,261; xml: 48,343; cpp: 13,946; sh: 4,900; perl: 1,650; javascript: 255; makefile: 252; ruby: 9
file content (70 lines) | stat: -rw-r--r-- 2,023 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<Chapter Label="Semaphores">
  <Heading>Semaphores</Heading>

<Section Label="section:Semaphores">
  <Heading>Semaphores</Heading>
  Semaphores are synchronized counters; they can also be used to simulate locks.

<ManSection>
    <Func Name="CreateSemaphore"
      Arg='[value]'/>

<Description>
The function <Ref Func="CreateSemaphore"/> takes an optional argument, which defaults to zero. It is the counter with which the
semaphore is initialized.

<Example><![CDATA[
gap> sem := CreateSemaphore(1);
<semaphore 0x1108e81c0: count = 1>
]]></Example>
</Description>
</ManSection>

<ManSection>
    <Func Name="WaitSemaphore"
      Arg='sem'/>

<Description>
<Ref Func="WaitSemaphore"/> receives a previously created semaphore as its argument. If the semaphore&#39;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
<Ref Func="SignalSemaphore"/>, then decrements the counter and returns.

<Example><![CDATA[
gap> sem := CreateSemaphore(1);
<semaphore 0x1108e81c0: count = 1>
gap> WaitSemaphore(sem);
gap> sem;
<semaphore 0x1108e81c0: count = 0>
]]></Example>
</Description>
</ManSection>

<ManSection>
    <Func Name="SignalSemaphore"
      Arg='sem'/>

<Description>
<Ref Func="SignalSemaphore"/> receives a previously created semaphore as its argument. It increments the semaphore&#39;s
counter and returns.

<Example><![CDATA[
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>
]]></Example>
</Description>
</ManSection>

  <Subsection Label="Simulating locks">
    <Heading>Simulating locks</Heading>

In order to use semaphores to simulate locks, create a semaphore with an initial value of 1. <Ref Func="WaitSemaphore"/> is
then equivalent to a lock operation, <Ref Func="SignalSemaphore"/> is equivalent to an unlock operation.
  </Subsection>
  </Section>
</Chapter>