Heim Backend-Entwicklung C#.Net-Tutorial Eine vorläufige Studie zum Multithreading-Mechanismus von C# (3)

Eine vorläufige Studie zum Multithreading-Mechanismus von C# (3)

Dec 21, 2016 pm 03:00 PM

Was wir hier beachten sollten, ist, dass andere Threads an den Thread angehängt sind, in dem sich die Main()-Funktion befindet. Der Start-Thread kann als Haupt-Thread bezeichnet werden Alle Vordergrund-Threads werden gestoppt, dann kann der Haupt-Thread beendet werden und alle Hintergrund-Threads werden bedingungslos beendet. Obwohl aus der Mikroperspektive alle Threads seriell ausgeführt werden, können Sie sich aus der Makroperspektive eine parallele Ausführung vorstellen.

Leser müssen die Eigenschaft Thread.ThreadState bemerkt haben. Sie stellt unter verschiedenen Umständen unterschiedliche Werte dar, sodass wir manchmal den Programmablauf beurteilen können . Die möglichen Werte von ThreadState in verschiedenen Situationen sind wie folgt:

Aborted: Der Thread wurde gestoppt
AbortRequested: Die Thread.Abort()-Methode des Threads wurde aufgerufen, aber der Thread wurde noch nicht gestoppt
Hintergrund: Der Thread wird im Hintergrund ausgeführt, bezogen auf die Eigenschaft Thread.IsBackground
Läuft: Der Thread wird normal ausgeführt
Gestoppt: Der Thread wurde gestoppt
StoPRequested: Der Thread wird dazu aufgefordert stop
Suspended: Der Thread wurde angehalten (In diesem Zustand können Sie ihn erneut ausführen, indem Sie die Resume()-Methode aufrufen)
SuspendRequested: Der Thread fordert an, angehalten zu werden, aber es wird in Zukunft keine Antwort geben
Nicht gestartet: Thread.Start() wird nicht aufgerufen, um die Ausführung des Threads zu starten
WaitSleepJoin: Der Thread befindet sich aufgrund aufrufender Methoden wie Wait(), Sleep() oder Join() in einem blockierten Zustand

Der oben erwähnte Hintergrundstatus zeigt an, dass der Thread im Hintergrund läuft. Was ist also das Besondere an dem Thread, der im Hintergrund läuft? Wo ist der Ort? Tatsächlich gibt es nur einen Unterschied zwischen Hintergrund-Threads und Vordergrund-Threads: Hintergrund-Threads verhindern nicht die Beendigung des Programms. Sobald alle Vordergrund-Threads eines Prozesses beendet wurden, beendet die CLR (Common Language Runtime Environment) den Prozess vollständig, indem sie die Abort()-Methode eines beliebigen überlebenden Hintergrundprozesses aufruft.

Wenn Threads um CPU-Zeit konkurrieren, stellt die CPU Dienste entsprechend der Priorität des Threads bereit. In C#-Anwendungen können Benutzer fünf verschiedene Prioritäten festlegen, nämlich „Highest“, „AboveNormal“, „BelowNormal“ und „Niedrigste“. Wenn die Priorität beim Erstellen eines Threads nicht angegeben wird, verwendet das System standardmäßig „ThreadPriority.Normal“. Um einem Thread
eine Priorität zuzuweisen, können wir den folgenden Code verwenden:

//Setze die Priorität auf die niedrigste
myThread.Priority=ThreadPriority.Lowest;

Durch Festlegen der Priorität des Threads können wir dafür sorgen, dass einige relativ wichtige Threads zuerst ausgeführt werden, z. B. die Beantwortung von Benutzern usw.

Da wir nun ein vorläufiges Verständnis dafür haben, wie ein Thread erstellt und gesteuert wird, werden wir uns mit den typischeren Problemen bei der Thread-Implementierung befassen und ihre Lösungen erkunden.

3. Thread-Synchronisation und Kommunikation – Produzenten und Konsumenten

 Nehmen wir eine Situation an, in der zwei Threads gleichzeitig Elemente zur Warteschlange hinzufügen Nimmt Elemente aus der Warteschlange, dann nennen wir den Thread, der das Element hinzufügt, einen Produzenten und den Thread, der das Element aufnimmt, einen Verbraucher. Das Producer-Consumer-Problem scheint einfach, aber es ist ein Problem, das in Multithread-Anwendungen gelöst werden muss. Es beinhaltet Synchronisations- und Kommunikationsprobleme zwischen Threads.

Wie bereits erwähnt, verfügt jeder Thread über seine eigenen Ressourcen, der Codebereich wird jedoch gemeinsam genutzt, dh jeder Thread kann dieselbe Funktion ausführen. In einer Multithread-Umgebung besteht jedoch ein mögliches Problem darin, dass mehrere Threads eine Funktion gleichzeitig ausführen, was zu Datenverwirrung und unvorhersehbaren Ergebnissen führt. Daher müssen wir diese Situation vermeiden. C# bietet eine Schlüsselwortsperre, die einen Codeabschnitt als kritischen Abschnitt definieren kann. Der sich gegenseitig ausschließende Abschnitt ermöglicht jeweils nur die Ausführung eines Threads, während andere Threads warten müssen. In C# ist das Schlüsselwort lock wie folgt definiert:

lock(expression) Statement_block

Das Obige ist der Inhalt der vorläufigen Untersuchung des Multithreading-Mechanismus von C# (3). Weitere verwandte Inhalte 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)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
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)

Active Directory mit C# Active Directory mit C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Active Directory mit C#. Hier besprechen wir die Einführung und die Funktionsweise von Active Directory in C# sowie die Syntax und das Beispiel.

Zugriffsmodifikatoren in C# Zugriffsmodifikatoren in C# Sep 03, 2024 pm 03:24 PM

Leitfaden zu den Zugriffsmodifikatoren in C#. Wir haben die Einführungstypen von Zugriffsmodifikatoren in C# zusammen mit Beispielen und Ausgaben besprochen.

Zufallszahlengenerator in C# Zufallszahlengenerator in C# Sep 03, 2024 pm 03:34 PM

Leitfaden zum Zufallszahlengenerator in C#. Hier besprechen wir die Funktionsweise des Zufallszahlengenerators, das Konzept von Pseudozufallszahlen und sicheren Zahlen.

C#-Datenrasteransicht C#-Datenrasteransicht Sep 03, 2024 pm 03:32 PM

Leitfaden zur C#-Datenrasteransicht. Hier diskutieren wir die Beispiele, wie eine Datenrasteransicht aus der SQL-Datenbank oder einer Excel-Datei geladen und exportiert werden kann.

C# StringReader C# StringReader Sep 03, 2024 pm 03:23 PM

Leitfaden für C# StringReader. Hier besprechen wir einen kurzen Überblick über C# StringReader und seine Funktionsweise zusammen mit verschiedenen Beispielen und Code.

Muster in C# Muster in C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Mustern in C#. Hier besprechen wir die Einführung und die drei wichtigsten Arten von Mustern in C# zusammen mit ihren Beispielen und der Code-Implementierung.

C#-Serialisierung C#-Serialisierung Sep 03, 2024 pm 03:30 PM

Leitfaden zur C#-Serialisierung. Hier besprechen wir die Einführung, die Schritte des C#-Serialisierungsobjekts, die Funktionsweise bzw. das Beispiel.

C# StringWriter C# StringWriter Sep 03, 2024 pm 03:23 PM

Leitfaden für C# StringWriter. Hier besprechen wir einen kurzen Überblick über die C#-StringWriter-Klasse und ihre Funktionsweise zusammen mit verschiedenen Beispielen und Codes.

See all articles