Ich habe zwei parallele Operationen (Threads), die beide beim Zugriff auf eine Variable in eine Konkurrenzsituation gelangen. Wie kann ich bestimmen, dass nur ein Thread gleichzeitig Zugriff auf einen bestimmten Bereich hat?
Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
Bei parallelen Operationen kommt es oft vor, dass mehrere Threads in einen Codebereich vordringen möchten, was, je nach Zeitzuweisung vom Scheduler, unterschiedliche Ergebnisse zur Folge haben kann.
Dieses Problem lässt sich mit Semaphoren lösen. Einen durch eine Semaphore abgedeckten Bereich können nur eine vorher definierte Anzahl von Threads betreten. Möchte ein Thread Zugriff auf den geschützten Bereich und es hat bereits die definierte maximale Anzahl
von Threads Zugriff auf den kritischen Bereich, so wird der Thread in eine Warteschlange eingereiht und erhält, sobald ein anderer Thread den Bereich verlässt, selbst Zugriff.
Weitere Informationen und Beispiele befinden sich in der MSDN Dokumentation unter [1]. Eine vereinfachte Version einer Semaphore, bei dem nur ein Thread Zugriff auf einen Bereich haben kann, ist der Mutex. Die Dokumentation hierzu ist unter [2] zu finden. Allgemeine
Informationen zu Threads befinden sich unter [3].
[1]
Semaphore-Klasse
[2]
Mutex-Klasse
[3] Threading (C# und Visual Basic)
Wir hoffen, vielen Besuchern der MSDN Foren
durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.
Viele Grüße,
Torsten Hanke
App-Entwickler-Hotline für MSDN Online Deutschland
Disclaimer:
Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die App-Entwickler-Hotline:
http://www.msdn-online.de/Hotline
Es gelten für die App-Entwickler-Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu
MarkenzeichenInformationen zur Datensicherheit
sowie die gesonderten
Nutzungsbedingungen für die App-Entwickler-Hotline.