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
  
     | 
    
      
<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/permissions.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/file.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">// attach to the semaphore set keyed to /tmp/sem containing 2 semaphores</font>
        semaphoreset    sem;
        sem.attach(file::generateKey(<font color="#ff00ff">"/tmp/sem"</font>,<font color="#ff00ff">1</font>),<font color="#ff00ff">2</font>);
        <font color="#0000ff">// loop 10 times, printing 1 and 2, 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">1</font>);
                printf(<font color="#ff00ff">"1</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
                sem.signal(<font color="#ff00ff">0</font>);
                sem.wait(<font color="#ff00ff">1</font>);
                printf(<font color="#ff00ff">"3</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
                sem.signal(<font color="#ff00ff">0</font>);
        }
        file::remove(<font color="#ff00ff">"/tmp/sem"</font>);
}
</pre>
 
     |