Heim Backend-Entwicklung C#.Net-Tutorial Tipps zur Verwendung von Interlocked für atomare Operationen in C#

Tipps zur Verwendung von Interlocked für atomare Operationen in C#

Dec 15, 2016 pm 02:17 PM
原子操作

Was sind atomare Operationen?

Atom bedeutet ursprünglich „das kleinste Teilchen, das nicht weiter geteilt werden kann“, während atomare Operation „eine oder eine Reihe von Operationen, die nicht unterbrochen werden können“ bedeutet. . Wenn in C# mehrere Threads gleichzeitig eine bestimmte Variable bearbeiten, sollten wir atomare Operationen verwenden, um zu verhindern, dass der von mehreren Threads erhaltene Wert nicht der neueste Wert ist.

Zum Beispiel: int result = 0;

Multi-Thread A führt Ergebnis(0)+1 aus

Multi-Thread B führt Ergebnis(0)+1 aus gleichzeitig

Es ist also schwer zu sagen, ob das Endergebnis 1 oder 2 ist. Wenn zwei Threads gleichzeitig in der CPU rechnen, ist das Ergebnis 1. Offensichtlich ist dieses Ergebnis nicht das, was wir wollen. Natürlich können Sie Sperren verwenden, um die Einzigartigkeit der Multithread-Ausführung sicherzustellen, aber ihre Leistung ist der atomaren Operation weitaus unterlegen.

Verwenden Sie Interlocked für atomare Operationen:

Verwenden Sie die von .NET bereitgestellte Interlocked-Klasse, um atomare Operationen für einige Daten auszuführen. Es sieht aus wie eine Sperre, ist aber keine atomare Operation basieren auf der CPU selbst und sind nicht blockierend, sodass sie effizienter sind als Sperren.

Im Folgenden wird C#-Code verwendet, um atomare Operationen zu demonstrieren:

class Program
{
//全局变量
private static int _result;
//Main方法
static void Main(string[] args)
{
//运行后按住Enter键数秒,对比使用Interlocked.Increment(ref _result);与 _result++;的不同
  while (true)
{
Task[] _tasks = new Task[100];
int i = 0;
for (i = 0; i < _tasks.Length; i++)
{
_tasks[i] = Task.Factory.StartNew((num) =>
{
var taskid = (int)num;
Work(taskid);
}, i);
}
Task.WaitAll(_tasks);
Console.WriteLine(_result);
Console.ReadKey();
}
}
//线程调用方法
private static void Work(int TaskID)
{
for (int i = 0; i < 10; i++)
{
//_result++;
Interlocked.Increment(ref _result);
}
}
}
Nach dem Login kopieren


Kommentieren Sie die letzten beiden Codezeilen, wenn Sie ausführen obiger Code_ result++;mit Interlocked.Increment(ref _result); und führen Sie dann eine der Zeilen aus. Halten Sie nach dem Ausführen die Eingabetaste gedrückt und führen Sie sie einige Sekunden lang aus.

Bisher wurde die Rolle von Interlocked reflektiert. Laden Sie den Beispielquellcode dieses Artikels herunter: Interlocked_Sample.

Weitere Anweisungen zu atomaren Operationen: Führen Sie Zuweisungsanweisungen auf einer 32-Bit-CPU aus. und die maximale Breite der Datenübertragung beträgt 4 Byte. Daher handelt es sich bei der 32-Bit-CPU um eine atomare Operation, solange die Lese- und Schreiboperationen weniger als 4 Bytes umfassen. Daher sind Operationen von Typen wie bool und int selbst atomare Operationen. Die von Interlocked bereitgestellte atomare Operationsmethode wird durch die Kapselung funktionaler CPU-Anweisungen in der untersten Ebene vervollständigt.

Das Obige ist die vom Herausgeber vorgestellte Technik zur Verwendung von Interlocked für atomare Operationen. Ich hoffe, dass sie Ihnen hilfreich sein wird. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht Sie rechtzeitig. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie verwende ich atomare Operationen in C++, um die Thread-Sicherheit sicherzustellen? Wie verwende ich atomare Operationen in C++, um die Thread-Sicherheit sicherzustellen? Jun 05, 2024 pm 03:54 PM

Die Thread-Sicherheit kann durch die Verwendung atomarer Operationen in C++ gewährleistet werden, indem die Vorlagenklasse std::atomic und die Klasse std::atomic_flag verwendet werden, um atomare Typen bzw. boolesche Typen darzustellen. Atomare Operationen werden durch Funktionen wie std::atomic_init(), std::atomic_load() und std::atomic_store() ausgeführt. Im tatsächlichen Fall werden atomare Operationen verwendet, um Thread-sichere Zähler zu implementieren, um die Thread-Sicherheit zu gewährleisten, wenn mehrere Threads gleichzeitig darauf zugreifen, und schließlich den richtigen Zählerwert auszugeben.

Atomare Datenbankoperationsmethode in MySQL Atomare Datenbankoperationsmethode in MySQL Jun 15, 2023 pm 08:36 PM

MySQL ist ein beliebtes relationales Datenbankverwaltungssystem (RDBMS), das zur Verwaltung verschiedener Datentypen verwendet wird. In der Datenbank bezieht sich eine atomare Operation auf eine Operation, die während der Ausführung nicht unterbrochen werden kann. Diese Operationen werden entweder alle erfolgreich ausgeführt oder alle schlagen fehl, und es wird keine Situation geben, in der nur ein Teil der Operation ausgeführt wird. Dies ist ACID (Atomizität, Konsistenz). ). , Isolation, Persistenz) Prinzip. In MySQL können Sie die folgenden Methoden verwenden, um atomare Operationen in der Datenbank zu implementieren. Transaktionen in MySQL

So lösen Sie Cache-Konsistenzprobleme in der C++-Entwicklung So lösen Sie Cache-Konsistenzprobleme in der C++-Entwicklung Aug 22, 2023 am 10:00 AM

So lösen Sie das Cache-Konsistenzproblem in der C++-Entwicklung In der C++-Entwicklung ist das Cache-Konsistenzproblem eine häufige und wichtige Herausforderung. Wenn Threads in einem Multithread-Programm auf verschiedenen Prozessoren ausgeführt werden, verfügt jeder Prozessor über einen eigenen Cache, und es kann zu Dateninkonsistenzen zwischen diesen Caches kommen. Diese Dateninkonsistenz kann zu unerwarteten Fehlern und undefiniertem Verhalten des Programms führen. Daher ist die Lösung des Cache-Konsistenzproblems in der C++-Entwicklung sehr wichtig. In C++ gibt es mehrere Möglichkeiten, das Cache-Kohärenzproblem zu lösen

So führen Sie atomare Operationen mit der AtomicInteger-Funktion in Java durch So führen Sie atomare Operationen mit der AtomicInteger-Funktion in Java durch Jun 26, 2023 pm 05:03 PM

Beim Schreiben von Multithread-Anwendungen ist es sehr wichtig, die Thread-Sicherheit zu berücksichtigen. Die Gewährleistung der Thread-Sicherheit, die Ermöglichung der Zusammenarbeit mehrerer Threads und die Verbesserung der Effizienz der Programmausführung sind ein Thema, das umfassende Überlegungen wert ist. Java bietet viele atomare Operationsfunktionen, einschließlich der atomaren Ganzzahloperationsfunktion AtomicInteger. AtomicInteger ist eine atomare Klasse in Java, die atomare Operationen für eine Ganzzahlvariable implementieren kann. Die sogenannte atomare Operation bedeutet, dass es nur sein kann

Java-Thread-Synchronisation und gegenseitiger Ausschluss: Lassen Sie Ihr Programm in der gleichzeitigen Welt tanzen Java-Thread-Synchronisation und gegenseitiger Ausschluss: Lassen Sie Ihr Programm in der gleichzeitigen Welt tanzen Feb 19, 2024 pm 07:33 PM

In der Informatik spricht man von gleichzeitiger Programmierung, wenn ein Programm mehrere Aufgaben gleichzeitig ausführen kann. Es wird häufig verwendet, um die Rechenleistung von Mehrkernprozessoren voll auszunutzen, und spielt eine wichtige Rolle in Bereichen wie Benutzeroberfläche, Netzwerkkommunikation und Datenbankbetrieb. Die gleichzeitige Programmierung bringt jedoch auch einige Herausforderungen mit sich. Die wichtigste besteht darin, die Datenkonsistenz und Programmkorrektheit sicherzustellen, wenn mehrere Threads gleichzeitig auf gemeinsam genutzte Ressourcen zugreifen. Java bietet umfangreiche Thread-Synchronisierungs- und gegenseitige Ausschlussmechanismen, um Entwicklern bei der Lösung von Herausforderungen bei der gleichzeitigen Programmierung zu helfen. Zu diesen Mechanismen gehören hauptsächlich Sperren, atomare Operationen und das Schlüsselwort volatile. Sperren werden verwendet, um gemeinsam genutzte Ressourcen zu schützen. Sie ermöglichen es einem Thread, beim Zugriff auf eine gemeinsam genutzte Ressource das Monopol zu übernehmen, wodurch verhindert wird, dass andere Threads gleichzeitig darauf zugreifen, wodurch Dateninkonsistenzen und Programmabstürze vermieden werden.

Ist die Variablenzuweisung in Golang eine atomare Operation? Ist die Variablenzuweisung in Golang eine atomare Operation? Jan 03, 2024 am 09:41 AM

Ob die Variablenzuweisung in Golang über atomare Operationen verfügt, erfordert bestimmte Codebeispiele. In der Programmierung beziehen sich atomare Operationen auf Operationen, die nicht unterbrochen werden können, das heißt, entweder werden alle erfolgreich ausgeführt oder keine davon. Bei der gleichzeitigen Programmierung ist die Bedeutung atomarer Operationen offensichtlich, da in gleichzeitigen Programmen mehrere Threads (oder Goroutinen) gleichzeitig auf dieselbe Variable zugreifen und diese ändern können. Wenn keine atomaren Operationen vorhanden sind, treten Rennbedingungen auf. Als Programmiersprache, die Parallelität unterstützt, bietet Golang auch Unterstützung für atomare Operationen. für

Untersuchen Sie den Zusammenhang zwischen der Zuweisung von Golang-Variablen und atomaren Operationen Untersuchen Sie den Zusammenhang zwischen der Zuweisung von Golang-Variablen und atomaren Operationen Jan 18, 2024 am 08:33 AM

Forschung zur Beziehung zwischen atomaren Operationen und der Zuweisung von Golang-Variablen Einführung: In der gleichzeitigen Programmierung sind atomare Operationen spezielle Operationen, die die Atomizität von Operationen sicherstellen können. Als Sprache, die gleichzeitige Programmierung unterstützt, stellt Golang Funktionen im Zusammenhang mit atomaren Operationen bereit, beispielsweise die Funktionen im Atompaket. In diesem Artikel wird die Beziehung zwischen atomaren Operationen und der Zuweisung von Golang-Variablen untersucht und das Verständnis anhand spezifischer Codebeispiele vertieft. 1. Grundkonzepte atomarer Operationen Atomoperationen beziehen sich auf die Funktion, dass eine Operation während der Ausführung nicht unterbrochen wird

Was sind atomare Operationen? Eine eingehende Analyse der atomaren Operationen in go Was sind atomare Operationen? Eine eingehende Analyse der atomaren Operationen in go Mar 28, 2023 pm 07:04 PM

In einigen unserer vorherigen Artikel zum Sync-Paket hätten wir auch entdecken sollen, dass an vielen Stellen atomare Operationen verwendet werden. Werfen wir heute einen detaillierten Blick auf die Prinzipien, Nutzungsszenarien, Verwendung usw. der atomaren Operationen in Go.

See all articles