Home Backend Development C#.Net Tutorial A preliminary study on the multi-threading mechanism of C# (3)

A preliminary study on the multi-threading mechanism of C# (3)

Dec 21, 2016 pm 03:00 PM

What we should note here is that other threads are attached to the thread where the Main() function is located. The Main() function is the entrance to the C# program. The starting thread can be called the main thread. If all foreground threads are stopped , then the main thread can be terminated, and all background threads will be terminated unconditionally. Although all threads are executed serially from a micro perspective, you can think of them as executing in parallel from a macro perspective.

Readers must have noticed the property Thread.ThreadState. This property represents the running state of the thread and has different values ​​under different circumstances. Therefore, we can sometimes design the program flow by judging the value. The possible values ​​of ThreadState in various situations are as follows:

Aborted: The thread has stopped
AbortRequested: The thread's Thread.Abort() method has been called, but the thread has not stopped yet
Background: The thread is executed in the background, and the attribute Thread .IsBackground related
Running: The thread is running normally
Stopped: The thread has been stopped
StoPRequested: The thread is being asked to stop
Suspended: The thread has been suspended (in this state, it can be re-run by calling the Resume() method)
SuspendRequested : The thread is requesting to be suspended, but there is no time to respond.
Unstarted: Thread.Start() is not called to start the running of the thread.
WaitSleepJoin: The thread is in a blocked state because it calls methods such as Wait(), Sleep() or Join().

As mentioned above, the Background status indicates that the thread is running in the background, so what is special about the thread running in the background? In fact, there is only one difference between background threads and foreground threads, that is, background threads do not prevent the termination of the program. Once all foreground threads of a process have terminated, the CLR (Common Language Runtime Environment) will completely terminate the process by calling the Abort() method of any surviving background process.

When threads compete for CPU time, the CPU provides services according to the priority of the thread. In C# applications, users can set 5 different priorities, from high to low, namely Highest, AboveNormal, Normal, BelowNormal, and Lowest. If the priority is not specified when creating a thread, the system defaults to ThreadPriority.Normal. . To assign a priority to a thread
, we can use the following code:

//Set the priority to the lowest
myThread.Priority=ThreadPriority.Lowest;

By setting the priority of the thread, we You can arrange for some relatively important threads to be executed first, such as responding to users and so on.

Now that we have a preliminary understanding of how to create and control a thread, we will delve into the more typical problems in thread implementation and explore their solutions.

3. Thread synchronization and communication - producers and consumers

 Assume a situation where two threads maintain a queue at the same time. If one thread adds elements to the queue, and the other thread removes elements from the queue To retrieve elements, we call the thread that adds elements a producer, and the thread that retrieves elements a consumer. The producer-consumer problem seems simple, but it is a problem that must be solved in multi-threaded applications. It involves synchronization and communication issues between threads.

As mentioned earlier, each thread has its own resources, but the code area is shared, that is, each thread can execute the same function. However, in a multi-threaded environment, a possible problem is that several threads execute a function at the same time, causing data confusion and unpredictable results. Therefore, we must avoid this situation. C# provides a keyword lock, which can define a section of code as a mutually exclusive section (critical section). The mutually exclusive section allows only one thread to enter execution at a time, while other threads must wait. In C#, the keyword lock is defined as follows:

lock(expression) statement_block

The above is the content of the preliminary exploration of C#’s multi-threading mechanism (3). For more related content, please pay attention to the PHP Chinese website (www.php.cn )!


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

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

Guide to Active Directory with C#. Here we discuss the introduction and how Active Directory works in C# along with the syntax and example.

C# Serialization C# Serialization Sep 03, 2024 pm 03:30 PM

Guide to C# Serialization. Here we discuss the introduction, steps of C# serialization object, working, and example respectively.

Random Number Generator in C# Random Number Generator in C# Sep 03, 2024 pm 03:34 PM

Guide to Random Number Generator in C#. Here we discuss how Random Number Generator work, concept of pseudo-random and secure numbers.

C# Data Grid View C# Data Grid View Sep 03, 2024 pm 03:32 PM

Guide to C# Data Grid View. Here we discuss the examples of how a data grid view can be loaded and exported from the SQL database or an excel file.

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

Guide to Patterns in C#. Here we discuss the introduction and top 3 types of Patterns in C# along with its examples and code implementation.

Prime Numbers in C# Prime Numbers in C# Sep 03, 2024 pm 03:35 PM

Guide to Prime Numbers in C#. Here we discuss the introduction and examples of prime numbers in c# along with code implementation.

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

Guide to Factorial in C#. Here we discuss the introduction to factorial in c# along with different examples and code implementation.

The difference between multithreading and asynchronous c# The difference between multithreading and asynchronous c# Apr 03, 2025 pm 02:57 PM

The difference between multithreading and asynchronous is that multithreading executes multiple threads at the same time, while asynchronously performs operations without blocking the current thread. Multithreading is used for compute-intensive tasks, while asynchronously is used for user interaction. The advantage of multi-threading is to improve computing performance, while the advantage of asynchronous is to not block UI threads. Choosing multithreading or asynchronous depends on the nature of the task: Computation-intensive tasks use multithreading, tasks that interact with external resources and need to keep UI responsiveness use asynchronous.

See all articles