Kann mir mal bitte jemand erklären, wozu genau bei SDL die Semaphore gedacht sind? Und was der Unterschied zu einem Mutex ist?
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
Und in ein durch einen Semaphor geschützter Bereich können dann quasi N Threads gleichzeitig rein? Wozu kann man sowas brauchen?
> 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
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.
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.