📅  最后修改于: 2023-12-03 15:11:34.372000             🧑  作者: Mango
在 .NET Framework 中,System.Threading 命名空间为多线程应用提供了类和接口。
Thread 类使您能够创建和控制线程、分配给线程的优先级以及获取有关线程的信息。Thread 类既可以创建单线程应用,也可以创建多线程应用。
使用 Thread 类创建线程的步骤如下:
using System;
using System.Threading;
class Program
{
static void Main()
{
// 创建新线程
Thread t = new Thread(new ThreadStart(DoWork));
// 启动线程
t.Start();
// 让主线程执行一些工作
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Main thread working...");
Thread.Sleep(500);
}
Console.ReadLine();
}
static void DoWork()
{
// 在新线程上执行的方法
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Worker thread working...");
Thread.Sleep(500);
}
}
}
Mutex 是一种同步原语,多个线程可以使用它来同步对共享资源的访问。
使用 Mutex 类的步骤如下:
using System.Threading;
class Program
{
static Mutex mut = new Mutex();
static void Main()
{
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(new ThreadStart(DoWork));
t.Start();
}
Console.ReadLine();
}
static void DoWork()
{
// 共享资源
mut.WaitOne();
Console.WriteLine("Thread {0} is using the shared resource", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
Console.WriteLine("Thread {0} has finished using the shared resource", Thread.CurrentThread.ManagedThreadId);
mut.ReleaseMutex();
}
}
Monitor 类也是一种同步原语,它提供了一种严格的同步机制,使多个线程可以轮流访问共享资源。
使用 Monitor 类的步骤如下:
using System.Threading;
class Program
{
static object lockedObject = new object();
static void Main()
{
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(new ThreadStart(DoWork));
t.Start();
}
Console.ReadLine();
}
static void DoWork()
{
// 共享资源
lock (lockedObject)
{
Console.WriteLine("Thread {0} is using the shared resource", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
Console.WriteLine("Thread {0} has finished using the shared resource", Thread.CurrentThread.ManagedThreadId);
}
}
}
以上是 System.Threading 命名空间中的一些常见类和接口。在编写多线程应用时,您还需要了解其他类和接口,例如 EventWaitHandle、ThreadPool 和 Task 等。