file-type

C#多线程编程示例教程

RAR文件

下载需积分: 9 | 21KB | 更新于2025-05-02 | 120 浏览量 | 7 下载量 举报 收藏
download 立即下载
C#多线程编程是现代软件开发中经常遇到的需求,尤其在需要处理高并发操作或者需要提高应用程序性能的场景下。C#为多线程编程提供了丰富的API,这使得在.NET框架下开发多线程应用程序变得更加简单和高效。 在C#中,主要有两种方式可以实现多线程编程:一种是使用System.Threading命名空间下的Thread类,另一种则是使用.NET 4.0引入的并行编程库(Task Parallel Library,简称TPL)。下面将详细介绍这两种方法,并给出相关的代码示例。 ### 1. 使用Thread类实现多线程 Thread类是C#中最基本的线程操作类。通过创建Thread实例并传入一个线程函数(ThreadStart委托或Func委托),可以启动一个新的线程来执行指定的操作。 ```csharp using System; using System.Threading; class MultithreadingConsoleDemo { static void Main() { // 创建线程 Thread newThread = new Thread(DoSomething); // 启动线程 newThread.Start(); Console.WriteLine("主线程继续执行其他操作..."); // 等待新线程完成 newThread.Join(); Console.WriteLine("新线程已完成,主线程继续..."); } static void DoSomething() { for (int i = 0; i < 5; i++) { Console.WriteLine($"子线程输出: {i}"); Thread.Sleep(1000); // 模拟耗时操作 } } } ``` ### 2. 使用Task Parallel Library (TPL) 从.NET 4.0开始,引入了TPL来简化并行编程。TPL主要提供了一些高层次的抽象,如Task、TaskFactory、Parallel等类,可以更简洁地编写并行代码。 ```csharp using System; using System.Threading.Tasks; class MultithreadingConsoleDemo { static async Task Main() { Console.WriteLine("主线程开始执行..."); // 使用Task.Run启动一个新任务 Task task = Task.Run(() => { for (int i = 0; i < 5; i++) { Console.WriteLine($"子任务输出: {i}"); Task.Delay(1000).Wait(); // 模拟耗时操作 } }); // 等待子任务完成 await task; Console.WriteLine("所有任务已完成,主线程继续..."); } } ``` ### 线程同步 在多线程编程中,线程同步是一个非常重要的话题。当多个线程需要访问共享资源时,可能会导致竞态条件,这时就需要使用锁(如Monitor、Mutex、Semaphore等)来确保数据的一致性和完整性。 ```csharp using System; using System.Threading; class SynchronizationExample { private static readonly object _locker = new object(); private static int _counter; static void Main() { Task[] tasks = new Task[10]; for (int i = 0; i < tasks.Length; i++) { int index = i; tasks[i] = Task.Factory.StartNew(() => { for (int j = 0; j < 1000; j++) { lock (_locker) { _counter++; } } }); } Task.WaitAll(tasks); Console.WriteLine($"计数器结果: {_counter}"); } } ``` ### 线程间通信 C#提供了多种机制来实现线程之间的通信和数据交换,如EventWaitHandle、AutoResetEvent、ManualResetEvent、Barrier等。这些机制允许线程在执行过程中进行协调,确保正确的执行顺序。 ```csharp using System; using System.Threading; class ThreadCommunicationExample { private static readonly AutoResetEvent _autoEvent = new AutoResetEvent(false); static void Main() { Thread threadA = new Thread(ThreadWorkerA); Thread threadB = new Thread(ThreadWorkerB); threadA.Start(); threadB.Start(); Console.WriteLine("主线程等待线程A和B执行完成..."); _autoEvent.WaitOne(); // 等待threadA通知 _autoEvent.WaitOne(); // 等待threadB通知 Console.WriteLine("所有线程执行完成,主线程退出..."); } static void ThreadWorkerA() { Console.WriteLine("线程A开始执行..."); // 执行某些操作 // ... Console.WriteLine("线程A完成工作,通知主线程"); _autoEvent.Set(); // 通知主线程 } static void ThreadWorkerB() { Console.WriteLine("线程B开始执行..."); // 执行某些操作 // ... Console.WriteLine("线程B完成工作,通知主线程"); _autoEvent.Set(); // 通知主线程 } } ``` ### 结语 本示例涵盖了C#多线程编程的基础知识和常见模式。无论是在控制台应用程序中使用Thread类,还是利用并行库中的Task来实现更高效的并行执行,以及如何使用各种同步和通信机制来确保线程安全和正确性,以上代码示例都提供了相应的理解和操作指南。掌握这些知识点对于在C#中进行高效、安全的多线程编程是非常重要的。

相关推荐

wahtung
  • 粉丝: 23
上传资源 快速赚钱