Ich versuche Bit-Flags in einer gemeinsam genutzten Variablen innerhalb einer Multithread-.NET-Anwendung zu setzen, konnte aber keine Parallele zum nativen InterlockedOr Funktion in der verwalteten Interlocked Klasse. Ich habe den folgenden Code für die Ausführung einer | = Zuweisung entwickelt, aber die theoretische Möglichkeit einer Endlosschleife macht mich unbehaglich:
%Vor%Kann dies auf sicherere Weise implementiert werden, indem nur die in die Interlocked-Klasse eingebauten Funktionen verwendet werden? Ich möchte, wenn möglich, eine Lösung mit expliziter Sperre vermeiden.
Nehmen wir an (diese Einschränkungen sind nicht grundlegend, nur um die Darstellung zu vereinfachen) das
currentFlags
ist 0
, Wenn wir das Bit k
auf 1
in currentFlags
einmal setzen, können wir or
durch + 1L << k
ersetzen. So können wir ein Helfer-Array set
verwenden, um sich daran zu erinnern, welche Bits bereits gesetzt sind, und% code_de%, falls erforderlich.
Tags und Links .net c# multithreading bit-manipulation interlocked