Best Practices in der Verwendung eines lock

Angenommen ich habe die folgende Eigenschaft in einer Klasse, und hat den Zweck verwendet werden, wie eine Sperre.

protected object SyncRoot { get; private set; }

Sowieso, unabhängig davon, ob und wie diese festgelegt wurde. Was ist die beste Praxis zu gehen über die Verwendung von es, wenn es, in der Tat, gesetzt?

Da lock funktioniert nicht mit null-Objekten, sollte ich damit umgehen, wie diese?

lock (SyncRoot ?? new object())
    SomeMethod();

Oder sollte ich auf null prüfen, wie diese?

if (SyncRoot != null)
    lock (SyncRoot)
        SomeMethod();
else
    SomeMethod();

Wenn es ist, in der Tat, gesetzt, ich möchte es verwenden, um zu sperren. Ansonsten ich don ' T care. Ist die erste Lösung ineffizient oder überflüssig sowieso?

EDIT: Alle diese Antworten sind gut. Jedoch kann ich nur eine auswählen. Angesichts meiner situation, wie besprochen, mit Luke, gibt es keinen Grund, warum meine SyncRoot, sollte null sein. Der Aufwand für eine Sperre in einem einzigen Multithread-Umgebung ist es kein biggy, aber notwendig, wenn in einem multi-fädelte ein.

(Abstimmung ups für alle 4 ya) Danke Euch allen für Eure schnelle Antworten.

InformationsquelleAutor Beljoda | 2012-08-03
Schreibe einen Kommentar