C#线程详解:从入门到实践

0 下载量 158 浏览量 更新于2024-09-03 收藏 124KB PDF 举报
"C#线程相关知识总结,包括线程的基本概念、线程的工作方式、线程的创建以及线程的局部变量特性。" 在C#编程中,线程是程序执行的基本单元,它允许代码在同一进程中并发执行。每个进程可以包含多个线程,每个线程都有自己的执行路径,但它们共享同一份内存空间。线程之间通过共享内存进行通信,这意味着它们可以访问相同的数据结构,但也可能导致竞态条件和死锁等问题,需要谨慎处理同步和互斥。 在.NET的客户端应用程序中,如控制台应用、WPF或WinForms应用,CLR(Common Language Runtime)默认创建一个主线程来启动程序,并在此主线程上执行。开发者可以创建额外的线程来实现并发执行。 线程的调度由操作系统负责,线程调度器会根据优先级和状态分配CPU时间。在单处理器系统中,线程通过时间片轮转的方式交替执行,而在多处理器系统中,线程可以在不同的处理器上并行执行,实现真正的并发。 创建线程在C#中通常通过`Thread`类完成。以下是一个简单的示例: ```csharp using System; using System.Threading; class ThreadTest { static void Main() { Thread t = new Thread(Write2); // 创建线程t t.Start(); // 执行Write2方法 for (int i = 0; i < 1000; i++) Console.Write("1"); // 主线程输出"1" } static void Write2() { for (int i = 0; i < 1000; i++) Console.Write("2"); // 新线程输出"2" } } ``` 在这个例子中,`Thread`对象`t`被创建并关联到`Write2`方法,调用`t.Start()`启动新线程。输出结果展示了两个线程并发执行的情况,"1"和"2"交错出现。 每个线程都有自己的内存栈,这意味着线程内的局部变量只在该线程内可见,不会影响其他线程。例如: ```csharp static void Main() { new Thread(Go).Start(); // 创建新线程 Go(); // 在主线程上执行Go } static void Go() { int localVar = 10; // 局部变量 Console.WriteLine($"Local var in thread: {Thread.CurrentThread.ManagedThreadId}: {localVar}"); } ``` 在上述代码中,`Go`方法在两个线程中分别执行,每个线程都有自己的`localVar`副本,互不影响。 理解C#中的线程知识对于开发高效的并发程序至关重要。线程的创建、管理和同步是多线程编程的核心,需要深入理解线程生命周期、同步机制(如Mutex、Semaphore、Monitor、锁等)以及线程安全的数据结构,才能更好地编写出稳定、高性能的多线程应用。