Unterschied Semaphor und Mutex

Hallo,
kann mir jemand den Unterschied von Semaphoren und Mutexen schreiben?
Beide haben Werte 0 oder 1. In beiden Fällen darf nur ein Prozess den kritischen Code ausführen. Aber wieso nennt man Mutexe auch Binäre Semaphoren???

steffi

Hi,

Semaphoren werden verwendet, wenn nur eine bestimmte Menge an Resourcen zur Verfügung steht. Deine Aussage, dass nur _ein_ Prozess den kritischen Code ausführen darf, ist bezogen auf Semaphoren somit nicht korrekt. Semaphoren können also beispielhaft Werte von 0 bis n annehmen. Mutexe sind binäre Semaphoren, weil bei ihnen die von Dir genannte Beschränkung auf einen Prozess gilt.

Gruss,

Herb

Aber es darf doch immer nur ein Prozess gleichzeitig den kritischen Code ausführen, oder hab ich das jetzt missverstanden???

Also Semaphoren können von mehreren Prozessen verwendet werden, Mutexe nur von einem einzelnen.

steffi

Semaphoren werden verwendet, wenn nur eine bestimmte Menge an
Resourcen zur Verfügung steht. Deine Aussage, dass nur _ein_
Prozess den kritischen Code ausführen darf, ist bezogen auf
Semaphoren somit nicht korrekt. Semaphoren können also
beispielhaft Werte von 0 bis n annehmen. Mutexe sind binäre
Semaphoren, weil bei ihnen die von Dir genannte Beschränkung
auf einen Prozess gilt.
Gruss,
Herb

Hi ho,

Aber es darf doch immer nur ein Prozess gleichzeitig
den kritischen Code ausführen, oder hab ich das jetzt
missverstanden???

es gibt Fälle, in denen zum Beispiel mehrere Threads gleichzeitig etwas tun dürfen, aber nicht beliebig viele. Dann werden Semaphoren eingesetzt, um die Zahl der Threads zu begrenzen.
In der Resourcenverwaltung kommt sowas öfter vor.

Also Semaphoren können von mehreren Prozessen verwendet
werden, Mutexe nur von einem einzelnen.

Stell Dir Semaphoren als einen Beutel mit Steinen drin vor. Jedesmal wenn ein Prozess oder Thread in einen kritischen Bereich eintreten will (zum Beispiel eine Resource verwenden will), dann entnimmt er einen Stein aus dem Beutel. Der Beutel enthält genau soviele Steine wie es Resourcen gibt. Sind keine Steine mehr da, dann muss der Prozess/Thread warten, bis ein anderer fertig ist.

Mutexe sind in dem Beispiel einfach ein Beutel mit nur einem Stein drin.

Grüsse,

Herb

1 Like

Moin

Aber es darf doch immer nur ein Prozess gleichzeitig
den kritischen Code ausführen, oder hab ich das jetzt
missverstanden???

NEIN. 1 Prozess pro Code/Variablen-satz. Immer.

Beispiel: Du hast 4 Drucker. Es können also 4 Programme gleichzeitig drucken. Also geht der Thread zuerst durch ein Semaphore (=> 4 gleichzeitig, aber nicht mehr). Dann holt er sich einen Drucker ab (und benutzt dabei ein Mutex damit in der Druckerverteilung nicht gleichzeitig 2 Threads rumlaufen)

cu

1 Like

Super Erklärung!!!
Hi Herb,
das ist ja mal ne richtig gute Erklärung! Vielen Dank!
steffi

Stell Dir Semaphoren als einen Beutel mit Steinen drin vor.
Jedesmal wenn ein Prozess oder Thread in einen kritischen
Bereich eintreten will (zum Beispiel eine Resource verwenden
will), dann entnimmt er einen Stein aus dem Beutel. Der Beutel
enthält genau soviele Steine wie es Resourcen gibt. Sind keine
Steine mehr da, dann muss der Prozess/Thread warten, bis ein
anderer fertig ist.

Mutexe sind in dem Beispiel einfach ein Beutel mit nur einem
Stein drin.

Vielen Dank,

habe das jetzt verstanden! Idiotensichere Erklärung :smile:
steffi

Beispiel: Du hast 4 Drucker. Es können also 4 Programme
gleichzeitig drucken. Also geht der Thread zuerst durch ein
Semaphore (=> 4 gleichzeitig, aber nicht mehr). Dann holt
er sich einen Drucker ab (und benutzt dabei ein Mutex damit in
der Druckerverteilung nicht gleichzeitig 2 Threads rumlaufen)

cu