Hallo miteinander! Ich stehe grade vor folgendem Problem: Ich habe eine verkette Liste, auf die mehrere Threads zugreifen. Und als nächstes will ich Elemente draus entfernen oder neue einfügen. Also dachte ich mir: klare Sache Mutex. Und dann hab ich ein wenig gelesen und jetzt bin ich verwirrt: sind Semaphoren hier vielleicht doch die bessere Wahl? Ich habe drei Konsumenten (greifen lesend auf die Listen zu) und einen Steuerthread (das ist der, der die Elemente rausnimmt). Setze ich jetzt die Semaphoren auf 3 und lasse jeden Konsumententhread einen Semaphor zum Arbeiten haben, warte dann im Steuerthread darauf, dass die Konsumenten die Semaphore zurückgeben und wenn der Steuerthread alle drei Semaphore hat kann er gefahrlos an der Liste operieren? Oder ist ein Mutex vor jedem Listenzugriff der bessere Ansatz? Meine Konsumententhreads machen übringens die Kommunikation mit dem Netzwerk, sollten deswegen also nicht zulange/zuhäufig ohne Listengriff sein. Oder gibts noch eine andere Lösung die in dem Fall besser geeignet wäre? Gruß Max
Wenn du hast, nimm einen "Schreibmutex". Wie genau sich das bei deinem System nennt, musst du selber rausfinden. "Schreibmutexe" erlauben beliebig viele Lesezugriffe gleichzeitig, aber nur einen Schreibzugriff. Oliver
Danke für den Hinweis, aber ich glaube im Zusammenspiel mit verketten Listen bringt mir das nicht so viel. Ich befürchte, dass die lesenden Threads "abgehängt" werden, wenn ich ein Element entferne.
Linux oder Windows? Bei Windows gibt es auch noch CriticalSection. Das ist in einem Prozess etwas schnell weil es nicht immer über den Kernel geht.
Max schrieb: > Ich befürchte, dass die lesenden > Threads "abgehängt" werden, wenn ich ein Element entferne. Befürchten ist fast so wie glauben: Beides ist beim Multithreading eher fehl am Platz. Da sollte man sich schon sicher sein. Mit Schreibmutex bekommst du das selbe Verhalten wie mit deiner "3 Semaphoren" Variante. Du sparst dir damit den Verwaltungsaufwand für die Semaphoren. Ob aber deine Listen so programmiert sind, daß mehrere Threads da lesend gleichzeitig drin unterwegs sein dürfen, kannst du nur selber beantworten. Solange die Konsumententhreads nur lesen, und nur der Schreibthread tatsächlich Daten verändert, sollte das ja eigentlich kein Problem sein. Wenn das nicht gegeben ist, oder du es schlicht nicht genau weißt, nimm eine normale Mutex. Dann kann immer nur ein Thread gleichzeitig zugreifen, mit allen Konsequenzen bezüglich des Timings. Glauben, vermuten, und hoffen geht bei Multithreading schief. Nicht sofort, aber immer. Oliver
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.