📜  系统.线程; (1)

📅  最后修改于: 2023-12-03 15:11:34.372000             🧑  作者: Mango

系统.Threading

在 .NET Framework 中,System.Threading 命名空间为多线程应用提供了类和接口。

Thread 类

Thread 类使您能够创建和控制线程、分配给线程的优先级以及获取有关线程的信息。Thread 类既可以创建单线程应用,也可以创建多线程应用。

使用 Thread 类创建线程的步骤如下:

  1. 实例化一个 Thread 类
  2. 创建一个 ThreadStart 委托指向您要在线程上执行的方法
  3. 使用 Thread 类的 Start() 方法启动线程
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 是一种同步原语,多个线程可以使用它来同步对共享资源的访问。

使用 Mutex 类的步骤如下:

  1. 实例化一个 Mutex 类
  2. 在使用共享资源之前调用 Mutex 类的 WaitOne() 方法锁定它
  3. 使用共享资源
  4. 使用 Mutex 类的 ReleaseMutex() 方法释放锁定
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 类也是一种同步原语,它提供了一种严格的同步机制,使多个线程可以轮流访问共享资源。

使用 Monitor 类的步骤如下:

  1. 在使用共享资源之前调用 Monitor 类的 Enter() 方法锁定它
  2. 使用共享资源
  3. 使用 Monitor 类的 Exit() 方法释放锁定
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 等。