mikrocontroller.net

Forum: PC-Programmierung SDL: Unterschied Semaphore und Mutex


Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir mal bitte jemand erklären, wozu genau bei SDL die Semaphore 
gedacht sind? Und was der Unterschied zu einem Mutex ist?

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider kenne ich 'SDL' nicht.. aber normalerweise(tm) ist ein Mutex ein 
binärer Semaphor - also ein geschützter Bereich, in den nur ★einer★ rein 
darf.

HTH

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und in ein durch einen Semaphor geschützter Bereich können dann quasi N 
Threads gleichzeitig rein?  Wozu kann man sowas brauchen?

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und in ein durch einen Semaphor geschützter Bereich können dann quasi N
> Threads gleichzeitig rein?

So ist das normalerweise(tm), ja.

> Wozu kann man sowas brauchen?

Immer dann, wenn du höchstens eine maximale Anzahl (echt größer 1 ;-) 
Ressourcen gleichzeitig benutzen darfst. Bei 'Zugriff auf eine gemeinsam 
genutzte Datenstruktur absichern' macht das natürlich wenig Sinn (da 
reicht ein Mutex), aber wenn bestimmte (meist Hardware-)Ressourcen nicht 
öfters vorhanden sind, dann dürfen halt auch höchsten so viele Freds 
gleichzeitig drauf zugreifen.

Kleines konstruiertes Beispiel: N (>> X) Arbeiter-Freds rechnen fleissig 
vor sich hin. Für eine bestimmte (recht kurze) Operation braucht jeder 
eine sehr große Menge Arbeitsspeicher. Jetzt könnte natürliche jeder 
fleissig drauflos malloc()-en, aber wenn das alle gleichzeitig machen, 
dann geht das System in die Knie (und der Prozess wird i.d.R. abgewürgt, 
oder er bekommt keinen Speicher und kann nur schulterzuckend die Arbeit 
einstellen). Packt man eine Semaphore um die Ressource 
'Arbeitsspeicher', dann können z.B. maximal X Freds gleichzeitig $viel 
Platz belegen - wenn einer fertig ist gibt er seinen Platz wieder frei 
und der nächste (sofern einer ansteht) kommt dran. Dann müssen zwar 
gelegentlich welche warten, aber zu keinem Zeitpunkt geht das System 
K.O.

HTH

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann mir zB eine Struktur vorstellen, wo ich 5 parallele identische 
Prozesse habe. zB 5 XXXX angesteuert werden. Jedes XXXX hat einen 
Zeitablauf. Wenn ich an diese Prozesse Anfragen habe, so hat sie 
gemeinsame Warteschlange 5 Entries. Diese werden mit je einer 
Semaphorewertigkeit gesichert. Allgemein kann man mit wertigen 
Semaphoren wertige Warteschlangen haben.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
g457 schrieb:
> Leider kenne ich 'SDL' nicht.. aber normalerweise(tm) ist ein Mutex ein
> binärer Semaphor - also ein geschützter Bereich, in den nur ★einer★ rein
> darf.

Außerdem können Mutexe nur von dem Thread freigegeben werden, der sie 
gelockt hat, während diese Eischränkung bei Semaphoren nicht gilt. So 
kann man Semaphoren auch noch für Threadsteuerungen verwenden, wo 
Threads nicht gehen.

Autor: Olaf Dreyer (Firma: O.D.I.S.) (dreyero)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Klaus,

in Mutex dient dazu, kritische Codebereiche vor dem mehrmaligen Betreten 
zu schützen. Z. B. "getBuffer(int length)" könnte globale Variablen 
verwenden, die bei gleichzeiter Nutzung durch verschiedene Threads 
durcheinander kommen.

Eine Semaphore dient der Thread-Kommunikation. Der erste Thread will 
eine Aktion durchführen wenn z. B. der zweite Thread eine Aktion beendet 
hat.
Das warten verbraucht dabei keine CPU-zeit.

Z. B.

thread1()
{
   ...

   sendMessage(thread2, aktion1_start); // Start der Aktion im anderen 
Thread
   takeSemaphore(aktion1_end_semaphore); // Warte bis Aktion beendet

   // Ergebnis bearbeiten

   ...
}


Gruß

Olaf

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.