C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#之System.Threading.Lock与lock

C#之System.Threading.Lock与lock使用及区别

作者:xiaoshuaishuai8

本文详细比较了C#中传统lock语句与System.Threading.Lock的异同,涵盖语法复杂度、异常处理、超时控制及性能影响等方面,帮助开发者选择合适的同步机制

System.Threading.Lock与lock语句的比较与差异

传统lock语句的用法

传统 lock 语句是 C# 中最常用的同步机制,用于确保代码块在多个线程中互斥执行。

其语法简洁,直接作用于对象引用。

private readonly object _lockObj = new object();

public void ThreadSafeMethod()
{
    lock (_lockObj)
    {
        // 临界区代码
    }
}

System.Threading.Lock的用法

System.Threading.Lock 是 .NET 中更底层的同步原语,提供更细粒度的控制。

它需要显式调用 EnterExit 方法。

private readonly object _lockObj = new object();

public void ThreadSafeMethod()
{
    bool lockTaken = false;
    try
    {
        System.Threading.Monitor.Enter(_lockObj, ref lockTaken);
        // 临界区代码
    }
    finally
    {
        if (lockTaken)
            System.Threading.Monitor.Exit(_lockObj);
    }
}

主要差异

语法复杂度

异常处理

超时控制

bool lockTaken = false;
try
{
    System.Threading.Monitor.TryEnter(_lockObj, 1000, ref lockTaken);
    if (lockTaken)
    {
        // 临界区代码
    }
    else
    {
        // 超时处理
    }
}
finally
{
    if (lockTaken)
        System.Threading.Monitor.Exit(_lockObj);
}

性能影响

适用场景

优先使用 lock 语句

简单同步需求,代码可读性更重要时。

使用 System.Threading.Monitor

需要超时控制、更灵活的锁管理或与其他同步机制(如 Wait/Pulse)配合时。

注意事项

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文