C#的线程锁

在 C# 中,线程锁是用于确保在多线程环境下对共享资源进行安全访问的机制。最常见的线程锁是通过 lock 关键字实现的。

使用 lock 关键字实现线程锁

csharp 复制代码
class Example
{
    private object lockObject = new object();
    private int count = 0;

    public void IncrementCount()
    {
        lock (lockObject)
        {
            // 这里的代码在同一时刻只能被一个线程执行
            count++;
        }
    }
}

在这个例子中,lock (lockObject) 语句创建了一个临界区,确保只有一个线程可以同时访问由 lockObject 保护的代码块。这样就可以避免多个线程同时修改 count 变量而导致数据不一致的问题。

使用 Monitor 类实现线程锁

除了使用 lock 关键字,C# 还提供了 Monitor 类来实现线程锁。

csharp 复制代码
class Example
{
    private object lockObject = new object();
    private int count = 0;

    public void IncrementCount()
    {
        Monitor.Enter(lockObject);
        try
        {
            // 这里的代码在同一时刻只能被一个线程执行
            count++;
        }
        finally
        {
            Monitor.Exit(lockObject);
        }
    }
}

在这个例子中,Monitor.EnterMonitor.Exit 方法与 lock 关键字的作用类似,都是用来确保在同一时刻只有一个线程可以访问被保护的代码块。

使用 Mutex 类实现线程锁

此外,C# 还提供了 Mutex 类,它是一种操作系统级别的线程同步原语,可以用来实现跨进程的线程同步。

csharp 复制代码
class Example
{
    private Mutex mutex = new Mutex();
    private int count = 0;

    public void IncrementCount()
    {
        mutex.WaitOne();
        try
        {
            // 这里的代码在同一时刻只能被一个线程执行
            count++;
        }
        finally
        {
            mutex.ReleaseMutex();
        }
    }
}

在这个例子中,mutex.WaitOnemutex.ReleaseMutex 方法用来确保在同一时刻只有一个线程可以访问被保护的代码块。

总之,线程锁是确保多线程环境下共享资源安全访问的重要机制,C# 提供了多种方式来实现线程锁,开发者可以根据具体情况选择合适的方式来保护共享资源。

相关推荐
小老鼠爱大米2 小时前
C# WPF - Prism 学习篇:搭建项目(一)
c#·wpf·prism
小码编匠6 小时前
WPF 自定义分页控件,可通过样式模板修改外观
后端·c#·.net
CoderPractice7 小时前
C#控制台小项目-飞行棋
开发语言·c#·小游戏·飞行棋
ajassi20008 小时前
开源 C# .net mvc 开发(八)IIS Express轻量化Web服务器的配置和使用
linux·开源·c#·mvc·.net
19H13 小时前
Flink-Source算子状态恢复分析
c#·linq
枯萎穿心攻击15 小时前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
Eiceblue16 小时前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
昏睡红猹1 天前
C#脚本化(Roslyn):如何在运行时引入nuget包
c#
张人玉1 天前
C# 常量与变量
java·算法·c#