Forum: PC-Programmierung Mutex welche Bedeutung bzw. was ist das genau?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Eieiei (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Guten Morgen,

Ich bräuchte zum Verständnis mal ein paar Beispiele in denen Mutex eine 
wichtige Rolle spielt.

Aus dem Wiki werde ich nicht schlau.

von Wilhelm M. (wimalopaan)


Bewertung
0 lesenswert
nicht lesenswert
Schau Dir mal Artikel / Bücher zum Thema "Wechselseitiger Ausschluß" 
(mutual exclusion) oder etwas über nebenläufige Programmierung.

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Eieiei schrieb:
> Guten Morgen,
>
> Ich bräuchte zum Verständnis mal ein paar Beispiele in denen Mutex eine
> wichtige Rolle spielt.
>
> Aus dem Wiki werde ich nicht schlau.

Im Prinzip ist es einfach: Wenn ein Thread in mehreren Einzelaktionen 
auf irgendeine Ressource zugreift und das nicht durch einen anderen 
Thread, der auf die selben Ressourcen zugreift, unterbrochen werden 
darf, kannst du einen Mutex verwenden, um das zu erzielen.

von fpga_anfaenger (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Oder noch einfacher, durch einen Mutex kannst du sicherstellen, das du 
exklusiven Zugriff auf eine Resource bekommst.

Beispiel
1
mutex.lock();
2
memcpy(global, arg, 100);
3
mutex.unlock();

Die memcpy() operation ist nicht atomar, das heißt, du brauchst mehre 
CPU Zyklen bis diese abgearbeitet ist. Die Variable global ist im 
kompletten Programm verfügbar. In meinem Multitaskingbetriebssystem kann 
es passieren, das Thread A während dieser memcpy() Operation durch den 
Scheduler unterbrochen wird. Wenn jetzt ein weiterer Thread anfängt, 
ebenfalls Daten in global zu kopieren, und danach wieder Thread A seine 
Operation fort führt, hast du in global teils Daten von Thread A und 
Thread B drinnen. Durch den Mutex kann sich Thread A exklusiven Zugriff 
sichern. Wenn Thread B das memcpy() ausführen will, bleibt Thread B 
solange an mutex.lock() hängen, bis Thread A mit mutex.unlock() den 
Mutex wieder frei gibt was sicherstellt, das memcpy() fertig ist.
Im Gegensatz zu einer Semaphore kann ein Mutex nur von dem gleichen 
Thread wieder freigegeben werden, in dessen Kontext er geholt wurde. 
Somit kann man einen Mutex nicht für Threadsynchronisationen verwenden.

von Eieiei (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Eine sehr gute Erklärung, dami kann ich etwas anfangen. Dankeschön.

von Jean player (Gast)


Bewertung
0 lesenswert
nicht lesenswert
fpga_anfaenger schrieb:
> Somit kann man einen Mutex nicht für Threadsynchronisationen verwenden.

Doch siehe waitcondition und mutex.
Dies ist extra dafür angedacht.
Gruss

von MBD (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Perfekt erklärt!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.