Parallelzugriff auf Daten

Teil 4: Programmieren für Multi-Core-Prozessoren

Deadlocks durch Schreib-/Lesesperren

Bei der Anforderung von Locks durch mehrere Threads können prinzipiell auch so genannte Deadlocks auftreten. Dies gilt immer dann, wenn mehrere Threads mehrere Locks beanspruchen, diese in unterschiedlicher Reihenfolge aufrufen und jeweils der andere Thread einen Lock belegt.

Der folgende skizzierte Ablauf soll dies verdeutlichen:

  • Thread_A fordert Lock_A an und erhält es

  • Thread_B fordert Lock_B an und erhält es

  • Thread_A fordert Lock_B an - da dieses belegt ist, wird Thread_A verdrängt

  • Thread_B fordert Lock_A an - da dieses belegt ist, wird Thread_B verdrängt

Um das zu umgehen, wird vorher geprüft, ob ein Lock verfügbar wäre. Ist dies der Fall, so wird die Sperre dem anfordernden Thread zugewiesen. Andernfalls wird eine bestimmte Zeit abgewartet und dann der Versuch abgebrochen, den Lock zu erhalten. .Net kennt dazu für jede Enter-Methode eine Variante mit „Try“. Diese beinhalten das Timeout.