Implementieren einer bitweisen Operation mit der Interlocked-Klasse in .NET

8

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.

    
Cryovat 27.07.2015, 15:21
quelle

1 Antwort

1

Nehmen wir an (diese Einschränkungen sind nicht grundlegend, nur um die Darstellung zu vereinfachen) das

  • am Anfang currentFlags ist 0 ,
  • Wir setzen höchstens eine Flagge in einem Schritt,
  • Wir berühren das Vorzeichenbit nicht.

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.

%Vor%     
AlexD 31.07.2015 17:45
quelle