<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><br>SemaforGeneral(N){<br><br>&nbsp;&nbsp;&nbsp; c = N&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // contor; lasa maxim N<br>&nbsp;&nbsp;&nbsp; mutex = SemaforBinar(1)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // protejeaza contorul<br>&nbsp;&nbsp;&nbsp; s2 = SemaforBinar(N&gt;1?1:0)&nbsp;&nbsp;&nbsp; // implementeaza "notificarea"<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; wait()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s2.wait()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mutex.wait()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c--<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if c &gt; 0<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s2.release()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mutex.release()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;
 release()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mutex.wait()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c++<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if c == 1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s2.release()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mutex.release()<br>}<br><br>//exemplu:<br>s = SemaforGeneral(2)&nbsp;&nbsp;&nbsp; // c = 2, mutex = 1, s2 = 1<br>proces1: s.wait()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // c = 1, mutex = 1, s2 = 0<br>p2: s.wait()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // c = 0, mutex = 1, s2 = 0<br>p3: s.wait()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // c = 0, mutex = 1, s2 = 0&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; p3 blocat in s2<br>p4: s.wait()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // c = 0, mutex = 1, s2 = 0&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; p4 blocat in s2<br>p2: s.release()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // c = 1
 deblocheaza p4 (p3 sau p4)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // p4 se blocheaza (posibil in mutex) dar e deblocat tot de p2<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // c = 0, mutex = 1, s2 = 0<br>p4: s.release()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // c = 1, deblocheaza p3, c = 0, mutex = 1, s2 = 0<br>p1:&nbsp;&nbsp;&nbsp; s.release()<br>p3: s.release()<br><br>// mia placut mult "little book of semaphores"<br><br>atasez si document daca formatarea este urata<br><br>--- On <b>Sat, 9/17/11, so-request@cursuri.cs.pub.ro <i>&lt;so-request@cursuri.cs.pub.ro&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: so-request@cursuri.cs.pub.ro &lt;so-request@cursuri.cs.pub.ro&gt;<br>Subject: so Digest, Vol 65,
 Issue 5<br>To: so@cursuri.cs.pub.ro<br>Date: Saturday, September 17, 2011, 2:00 AM<br><br><div class="plainMail">Send so mailing list submissions to<br>&nbsp;&nbsp;&nbsp; <a ymailto="mailto:so@cursuri.cs.pub.ro" href="/mc/compose?to=so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br><br>To subscribe or unsubscribe via the World Wide Web, visit<br>&nbsp;&nbsp;&nbsp; <a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br>or, via email, send a message with subject or body 'help' to<br>&nbsp;&nbsp;&nbsp; <a ymailto="mailto:so-request@cursuri.cs.pub.ro" href="/mc/compose?to=so-request@cursuri.cs.pub.ro">so-request@cursuri.cs.pub.ro</a><br><br>You can reach the person managing the list at<br>&nbsp;&nbsp;&nbsp; <a ymailto="mailto:so-owner@cursuri.cs.pub.ro" href="/mc/compose?to=so-owner@cursuri.cs.pub.ro">so-owner@cursuri.cs.pub.ro</a><br><br>When replying, please edit your
 Subject line so it is more specific<br>than "Re: Contents of so digest..."<br><br><br>Today's Topics:<br><br>&nbsp;&nbsp;&nbsp;1. Re: so Digest, Vol 65, Issue 4 (Razvan Pistolea)<br>&nbsp;&nbsp;&nbsp;2. Re: so Digest, Vol 65, Issue 4 (Razvan Deaconescu)<br><br><br>----------------------------------------------------------------------<br><br>Message: 1<br>Date: Fri, 16 Sep 2011 06:31:18 -0700 (PDT)<br>From: Razvan Pistolea &lt;<a ymailto="mailto:razvy000@yahoo.com" href="/mc/compose?to=razvy000@yahoo.com">razvy000@yahoo.com</a>&gt;<br>Subject: Re: [so] so Digest, Vol 65, Issue 4<br>To: <a ymailto="mailto:so@cursuri.cs.pub.ro" href="/mc/compose?to=so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br>Message-ID:<br>&nbsp;&nbsp;&nbsp; &lt;<a ymailto="mailto:1316179878.14177.YahooMailClassic@web38004.mail.mud.yahoo.com"
 href="/mc/compose?to=1316179878.14177.YahooMailClassic@web38004.mail.mud.yahoo.com">1316179878.14177.YahooMailClassic@web38004.mail.mud.yahoo.com</a>&gt;<br>Content-Type: text/plain; charset="utf-8"<br><br>legat de:<br>"Se poate implementa un semafor folosind?doar?mutex-uri? Dar un mutex folosind?doar?semafoare?R?spuns:Un mutex se poate implementa ca un semafor binar. R?spuns afirmativ la a doua ?ntrebare.Nu?se poate implementa un semafor folosind?doar?mutex-uri ?ntruc?t avem nevoie de un mecanism de notificare atomic? ?mpreun? cu celelalte ac?iuni. Presupun?nd c? se folose?te un contor, implementarea func?iei?down?va fi:"<br><br>Am o mica nedumerire:facem o distinctie intre mutex si semafor binar? (adica ownership, numai threadul care a facut lock pe mutex poate sa faca unlock)<br>daca DAatunci in primul raspuns ar trebui completat semaforul cu informatie despre cine a luat (ca doar threadID care a luat semaforul sa faca unlock)<br>daca NUatunci un
 semanfor general poate fi implementat cu semafoare binare (2 sunt de ajuns) si un contor.<br>--- On Fri, 9/16/11, <a ymailto="mailto:so-request@cursuri.cs.pub.ro" href="/mc/compose?to=so-request@cursuri.cs.pub.ro">so-request@cursuri.cs.pub.ro</a> &lt;<a ymailto="mailto:so-request@cursuri.cs.pub.ro" href="/mc/compose?to=so-request@cursuri.cs.pub.ro">so-request@cursuri.cs.pub.ro</a>&gt; wrote:<br><br>From: <a ymailto="mailto:so-request@cursuri.cs.pub.ro" href="/mc/compose?to=so-request@cursuri.cs.pub.ro">so-request@cursuri.cs.pub.ro</a> &lt;<a ymailto="mailto:so-request@cursuri.cs.pub.ro" href="/mc/compose?to=so-request@cursuri.cs.pub.ro">so-request@cursuri.cs.pub.ro</a>&gt;<br>Subject: so Digest, Vol 65, Issue 4<br>To: <a ymailto="mailto:so@cursuri.cs.pub.ro" href="/mc/compose?to=so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br>Date: Friday, September 16, 2011, 2:00 AM<br><br>Send so mailing list submissions to<br>??? <a
 ymailto="mailto:so@cursuri.cs.pub.ro" href="/mc/compose?to=so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br><br>To subscribe or unsubscribe via the World Wide Web, visit<br>??? <a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br>or, via email, send a message with subject or body 'help' to<br>??? <a ymailto="mailto:so-request@cursuri.cs.pub.ro" href="/mc/compose?to=so-request@cursuri.cs.pub.ro">so-request@cursuri.cs.pub.ro</a><br><br>You can reach the person managing the list at<br>??? <a ymailto="mailto:so-owner@cursuri.cs.pub.ro" href="/mc/compose?to=so-owner@cursuri.cs.pub.ro">so-owner@cursuri.cs.pub.ro</a><br><br>When replying, please edit your Subject line so it is more specific<br>than "Re: Contents of so digest..."<br><br><br>Today's Topics:<br><br>???1. Subiecte examen restanta/marire - septembrie 2011<br>? ? ? (Razvan
 Deaconescu)<br><br><br>----------------------------------------------------------------------<br><br>Message: 1<br>Date: Fri, 16 Sep 2011 10:30:16 +0300<br>From: Razvan Deaconescu &lt;<a ymailto="mailto:razvan.deaconescu@cs.pub.ro" href="/mc/compose?to=razvan.deaconescu@cs.pub.ro">razvan.deaconescu@cs.pub.ro</a>&gt;<br>Subject: [so] Subiecte examen restanta/marire - septembrie 2011<br>To: Student-SO Mailing List &lt;<a ymailto="mailto:so@cursuri.cs.pub.ro" href="/mc/compose?to=so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a>&gt;<br>Message-ID: &lt;<a ymailto="mailto:1316158216.2690.70.camel@einherjar.cs.pub.ro" href="/mc/compose?to=1316158216.2690.70.camel@einherjar.cs.pub.ro">1316158216.2690.70.camel@einherjar.cs.pub.ro</a>&gt;<br>Content-Type: text/plain; charset="UTF-8"<br><br>Salutare!<br><br>G?si?i pe wiki[1] subiectele de la examenele de restan??/m?rire din<br>sesiunea septembrie 2011.<br><br>[1] <a
 href="http://elf.cs.pub.ro/so/wiki/examen#examen-restanta" target="_blank">http://elf.cs.pub.ro/so/wiki/examen#examen-restanta</a><br><br>R?zvan<br><br><br><br>------------------------------<br><br>_______________________________________________<br>so mailing list<br><a ymailto="mailto:so@cursuri.cs.pub.ro" href="/mc/compose?to=so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br><a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br><br><br>End of so Digest, Vol 65, Issue 4<br>*********************************<br>-------------- next part --------------<br>An HTML attachment was scrubbed...<br>URL: &lt;<a href="http://cursuri.cs.pub.ro/pipermail/so/attachments/20110916/0ab3acac/attachment-0001.html" target="_blank">http://cursuri.cs.pub.ro/pipermail/so/attachments/20110916/0ab3acac/attachment-0001.html</a>&gt;<br><br>------------------------------<br><br>Message: 2<br>Date:
 Fri, 16 Sep 2011 16:39:12 +0300<br>From: Razvan Deaconescu &lt;<a ymailto="mailto:razvan.deaconescu@cs.pub.ro" href="/mc/compose?to=razvan.deaconescu@cs.pub.ro">razvan.deaconescu@cs.pub.ro</a>&gt;<br>Subject: Re: [so] so Digest, Vol 65, Issue 4<br>To: Sisteme de Operare &lt;<a ymailto="mailto:so@cursuri.cs.pub.ro" href="/mc/compose?to=so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a>&gt;<br>Message-ID: &lt;<a ymailto="mailto:1316180352.2690.124.camel@einherjar.cs.pub.ro" href="/mc/compose?to=1316180352.2690.124.camel@einherjar.cs.pub.ro">1316180352.2690.124.camel@einherjar.cs.pub.ro</a>&gt;<br>Content-Type: text/plain; charset="UTF-8"<br><br>On Fri, 2011-09-16 at 06:31 -0700, Razvan Pistolea wrote:<br>&gt; daca NU, atunci un semanfor general poate fi implementat cu semafoare<br>&gt; binare (2 sunt de ajuns) si un contor.<br><br>Cum
 anume?<br><br>R?zvan<br><br><br><br>------------------------------<br><br>_______________________________________________<br>so mailing list<br><a ymailto="mailto:so@cursuri.cs.pub.ro" href="/mc/compose?to=so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br><a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br><br><br>End of so Digest, Vol 65, Issue 5<br>*********************************<br></div></blockquote></td></tr></table>