c#多线程编程基础


在C#中,多线程编程是处理并发执行任务的重要技术。这里,我将简要介绍C#多线程编程的基础,包括创建线程、线程同步等基本概念。

### 1. 创建线程

在C#中,可以通过`System.Threading.Thread`类来创建新的线程。以下是一个简单的示例,展示如何创建一个线程来执行一段代码:


using System;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个新的线程
        Thread thread = new Thread(new ThreadStart(ThreadMethod));

        // 启动线程
        thread.Start();

        // 主线程继续执行其他任务
        Console.WriteLine("主线程继续执行...");

        // 等待子线程完成
        thread.Join();

        Console.WriteLine("所有线程执行完毕。");
    }

    // 线程将执行的方法
    static void ThreadMethod()
    {
        Console.WriteLine("线程开始执行...");
        // 在这里执行一些耗时的操作
        Thread.Sleep(1000); // 模拟耗时操作
        Console.WriteLine("线程执行完毕。");
    }
}

### 2. 线程同步

当多个线程需要访问共享资源时,就需要进行线程同步以避免数据不一致或竞争条件。C#提供了多种同步机制,如`lock`语句、`Monitor`类、`Mutex`类、`Semaphore`类、`EventWaitHandle`类等。

以下是一个使用`lock`语句进行线程同步的简单示例:


using System;
using System.Threading;

class Program
{
    // 定义一个共享资源
    private static int count = 0;

    // 定义一个对象作为锁
    private static readonly object lockObj = new object();

    static void Main(string[] args)
    {
        // 创建并启动多个线程
        for (int i = 0; i < 10; i++)
        {
            Thread thread = new Thread(new ThreadStart(ThreadMethod));
            thread.Start();
        }

        // 等待所有线程完成
        Thread.Sleep(2000); // 等待足够长的时间以确保所有线程都已执行完毕(注意:这不是一个好的同步方式)

        Console.WriteLine($"最终计数: {count}");
    }

    static void ThreadMethod()
    {
        // 使用lock语句进行线程同步
        lock (lockObj)
        {
            count++;
            Console.WriteLine($"线程 {Thread.CurrentThread.ManagedThreadId} 修改了计数,当前计数: {count}");
        }
    }
}

请注意,上面的`Thread.Sleep(2000);`只是为了演示目的而使用的,实际开发中应该使用更合适的同步机制来等待所有线程完成,如`Thread.Join()`(对于少量线程)或使用更高级的并发原语,如`Task`和`Task.WaitAll()`。

### 总结

C#多线程编程是一个广泛而深入的话题,上述内容只是介绍了最基本的概念和用法。在实际开发中,你可能还需要了解线程池、任务并行库(TPL)、异步编程模型(APM和TAP)等高级特性来更好地利用多线程和并发。