Hier ein paar Regeln zur richtigen Verwendung von lock():

  • Das Objekt auf das gelockt wird sollte nur innerhalb der Klasse sichtbar sein in der es verwendet wird. Mit Vorteil wird dazu ein eigenes Objekt erstellt, z.B. mit:
private object myLock = new object();
  • Zuweisungen (von Referenzen und Integer-Zahlen) sind immer atomare Operationen und benötigen deshalb kein lock! Anders sieht es aus bei 64-bit Datentypen (z.B. long, decimal) auf einem 32-bit System.
  • Vielfach lässt sich ein lock()-Block durch Verwendung einer der Hilfsfunktionen der Interlocked-Klasse vermeiden.