Ich frage mich nur, ob dieser Code, den ein Mitentwickler (der inzwischen gegangen ist) in Ordnung ist, ich glaube, er wollte vermeiden, eine Sperre zu setzen. Gibt es einen Leistungsunterschied zwischen dieser und nur einer direkten Sperre?
%Vor%Ich dachte, dass so etwas mit einem Schloss einfacher wäre? Es wird in der Tat von mehreren Threads verwendet, weshalb der Einsatz von Sperren / Verriegelungen entschieden wurde.
Ja, was Sie tun, ist vom Standpunkt der Rasse aus sicher, dass Sie das Feld m_LayoutSuspended
erreichen. Aus folgenden Gründen ist jedoch eine Sperre erforderlich, wenn der Code Folgendes ausführt:
Eine sicherere Methode, die CompareExchange
verwendet, um sicherzustellen, dass keine Racebedingungen aufgetreten sind:
Oder besser, verwenden Sie einfach eine Sperre.
Persönlich würde ich einen flüchtigen booleschen verwenden:
%Vor%Andererseits, wie ich kürzlich an anderer Stelle bestätigt habe, bedeutet volatil nicht, was ich dachte. Ich vermute, das ist okay, aber:)
Selbst wenn du bei Interlocked
bleibst, würde ich es in ein int
ändern ... es gibt keine Notwendigkeit, 32-Bit-Systemen Schwierigkeiten zu machen, einen 64-Bit-Schreib-Atomic zu machen, wenn sie es mit 32 leicht schaffen Bits ...
Tags und Links c# multithreading interlocked