ConsoleApp1C#多线程示例
在 C# 编程中,线程是并发执行代码的基本单元。通过多线程,程序能够同时多个任务,提升执行效率。在这个示例中,展示了如何创建、使用和释放线程,关注线程间的等待与唤醒机制。
C# 中可以使用 System.Threading 命名空间中的 Thread 类来管理线程。通过创建 Thread 对象并传递委托,可以启动新线程:
csharp
Thread thread = new Thread(new ThreadStart(MyMethod));
thread.Start();
此时,MyMethod 将会在新的线程中执行。
线程的释放通常由系统自动控制。在 C# 中,线程一旦完成任务或被中断,就会自动释放资源。为了让线程在所有前台线程结束时自动终止,可以将线程的 IsBackground 属性设置为 true。这样,后台线程无需显式释放。
多线程编程中的另一个重要概念是线程间的等待与唤醒机制。C# 了多种同步原语,如 Monitor、Mutex、Semaphore 和 EventWaitHandle,它们用于控制线程执行顺序。地,EventWaitHandle 类适合实现等待与唤醒操作。
EventWaitHandle 有两种主要状态:设置(Set)和重置(Reset)。线程可以在等待状态,直到事件被设置。一旦事件被设置,至少一个等待线程会被唤醒继续执行。
以下是使用 AutoResetEvent(EventWaitHandle 的子类)实现线程等待与唤醒的简单示例:
csharp
using System.Threading;
AutoResetEvent waitHandle = new AutoResetEvent(false);
// 线程 A
void ThreadA() {
// 执行任务
// ...
waitHandle.Set();
// 设置事件,唤醒线程 B
}
// 线程 B
void ThreadB() {
waitHandle.WaitOne();
// 等待事件被设置
// 线程 A 设置事件后,线程 B 被唤醒,继续执行
// ...
}
线程 B 调用 WaitOne() 方法进入等待状态,直到线程 A 调用 Set() 唤醒它。值得注意的是,AutoResetEvent 只会唤醒一个等待的线程,且在事件被设置后会自动重置为未设置状态。
示例程序展示了线程的创建、后台线程的使用及线程间同步机制。理解并掌握这些技术,对于 C# 多线程编程能力的提升至关重要。