C# 多线程 - 从基础知识到高级概念

本文介绍了C#中线程的基本概念,包括线程定义、创建、生命周期阶段、同步方法(如Lock和Mutex),以及高级概念如线程池、任务和并行循环。这些技术有助于提升程序性能和资源利用率。
摘要由CSDN通过智能技术生成

前言

线程是计算机中的一个基本概念,它允许多个操作同时运行,从而充分利用可用资源,并提高程序性能。在 C# 中, System.Threading 命名空间提供了一组丰富的类来管理和控制线程。在这篇文章中,我们将通过示例从基本概念到高级概念,探索 C# 中的线程。

什么是线程?

线程是进程内的最小执行单元。每个线程都有自己的堆栈和局部变量。在 C# 中,主线程是执行 Main 方法的线程。不过,您可以创建额外的线程来并行运行任务。

创建线程

要在 C# 中创建线程,可以使用 System.Threading 命名空间中的 Thread 类。

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 方法。

线程生命周期

线程在其生命周期中会经历各种状态:

Unstarted

线程已创建但未启动。

Running

线程当前正在执行。

WaitSleepJoin

线程被阻塞,等待某些条件。

Stopped

线程已完成执行或已中止。

您可以使用 ThreadState 属性检查线程的状态。

线程同步

当多个线程访问共享资源时,可能会出现竞争条件。为了防止这种情况,您可以使用同步技术。

Lock 锁

lock 关键字可以确保一个线程在临界区时,另一个线程不进入临界区。

private static object _lock = new object();

static void SafePrint(string message)
{
    lock (_lock)
    {
        Console.WriteLine(message);
    }
}

Mutex 互斥锁

互斥锁类似于锁,但可以跨多个进程工作。

using (Mutex mutex = new Mutex(false, "MyMutexName"))
{
    mutex.WaitOne();
    // ...
    mutex.ReleaseMutex()
}

高级线程概念

Thread Pooling 线程池

您可以使用线程池,ThreadPool 类允许您对任务进行排队,它会自动管理各个线程。

ThreadPool.QueueUserWorkItem((state) => {
    Console.WriteLine("This is running in a thread pool thread.");
});

Tasks 任务

任务代表异步操作。它们构建在线程池之上,并提供更高级别的并发处理方式。

using System.Threading.Tasks;

Task.Run(() => {
    Console.WriteLine("This is running in a task.");
});

Parallel Loops 并行循环

Parallel 类提供了一种并行化循环的方法,使它们在多核系统上运行得更快。

Parallel.For(0, 10, i => {
    Console.WriteLine($"Parallel loop iteration: {i}");
});

总结

C# 中的线程提供了一种利用并发性来提高应用程序性能的强大方法。无论您是刚刚入门还是希望深入研究高级概念, System.Threading 命名空间提供了您所需的所有工具。,希望对您有用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值