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
|
<pre>
<font color="#0000ff">// Copyright (c) 2001 David Muse</font>
<font color="#0000ff">// See the file COPYING for more information</font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/semaphoreset.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/file.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/permissions.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><stdio.h></font>
<font color="#a020f0">#ifdef RUDIMENTS_NAMESPACE</font>
<font color="#a52a2a"><b>using</b></font> <font color="#2e8b57"><b>namespace</b></font> rudiments;
<font color="#a020f0">#endif</font>
<font color="#2e8b57"><b>int</b></font> main(<font color="#2e8b57"><b>int</b></font> argc, <font color="#2e8b57"><b>const</b></font> <font color="#2e8b57"><b>char</b></font> **argv) {
<font color="#0000ff">// create a file called /tmp/sem</font>
file::remove(<font color="#ff00ff">"/tmp/sem"</font>);
file fd;
fd.create(<font color="#ff00ff">"/tmp/sem"</font>,permissions::evalPermString(<font color="#ff00ff">"rw-------"</font>));
fd.close();
<font color="#0000ff">// Create a semaphore set keyed to /tmp/sem containing 2 individual</font>
<font color="#0000ff">// semaphores. Initialize them to 0 and 1 respectively.</font>
<font color="#2e8b57"><b>int</b></font> vals[<font color="#ff00ff">2</font>]={<font color="#ff00ff">0</font>,<font color="#ff00ff">1</font>};
semaphoreset sem;
sem.create(file::generateKey(<font color="#ff00ff">"/tmp/sem"</font>,<font color="#ff00ff">1</font>),
permissions::evalPermString(<font color="#ff00ff">"rw-------"</font>),<font color="#ff00ff">2</font>,vals);
<font color="#0000ff">// loop 10 times, printing 2 and 4, synchronizing with another process</font>
<font color="#0000ff">// using the semaphores.</font>
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>int</b></font> i=<font color="#ff00ff">0</font>; i<<font color="#ff00ff">10</font>; i++) {
sem.wait(<font color="#ff00ff">0</font>);
printf(<font color="#ff00ff">"2</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
sem.signal(<font color="#ff00ff">1</font>);
sem.wait(<font color="#ff00ff">0</font>);
printf(<font color="#ff00ff">"4</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
sem.signal(<font color="#ff00ff">1</font>);
}
}
</pre>
|