线程是计算机科学中的一个基本概念,它允许多个操作并发运行,从而充分利用可用资源并提高应用程序性能。在 C# 中,命名空间提供了一组丰富的类来管理和控制线程。在这篇博文中,我们将通过示例从基本概念到高级概念探讨 C# 中的线程处理。System.Threading
线程是进程中最小的执行单元。每个线程都有自己的堆栈和局部变量。在 C# 中,主线程是执行该方法的线程。但是,您可以创建其他线程来并行运行任务。Main
若要在 C# 中创建线程,可以使用命名空间中的类。ThreadSystem.Threading
using System;
using System.Threading;
class Program
{
static void Main()
{
Thread newThread = new Thread(new ThreadStart(PrintNumbers));
newThread.Start();
}
static void PrintNumbers()
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
}
}
在上面的示例中,我们创建了一个运行该方法的新线程。PrintNumbers
线程在其生命周期中会经历各种状态:
您可以使用该属性检查线程的状态。ThreadState
当多个线程访问共享资源时,可能会出现争用条件。若要防止这种情况,可以使用同步技术。
该关键字确保一个线程不会进入关键部分,而另一个线程位于关键部分。lock
private static object _lock = new object();
static void SafePrint(string message)
{
lock (_lock)
{
Console.WriteLine(message);
}
}
互斥锁类似于锁,但可以跨多个进程工作。
using (Mutex mutex = new Mutex(false, "MyMutexName"))
{
mutex.WaitOne();
// Critical section
mutex.ReleaseMutex();
}
您可以使用线程池,而不是创建和销毁线程(这可能是资源密集型的)。该类允许您在不管理单个线程的情况下对任务进行排队。ThreadPool
ThreadPool.QueueUserWorkItem((state) => {
Console.WriteLine("This is running in a thread pool thread.");
});
任务表示异步操作。它们构建在线程池之上,并提供更高级别的并发工作方式。
using System.Threading.Tasks;
Task.Run(() => {
Console.WriteLine("This is running in a task.");
});
该类提供了一种并行化循环的方法,使它们在多核系统上运行得更快。Parallel
Parallel.For(0, 10, i => {
Console.WriteLine($"Parallel loop iteration: {i}");
});
C# 中的线程处理提供了一种通过利用并发性来提高应用程序性能的强大方法。无论你是刚刚起步,还是希望深入了解高级概念,命名空间都能提供你需要的所有工具。请记住,在处理线程时要始终小心,因为不正确的同步会导致不可预知的结果。