c# - 需要多个锁对象?

标签 c# multithreading concurrency locking

给定以下类:

class x
{
    Object lockOne = new Object();
    Object lockTwo = new Object();

    List<Something> listOne = new List<Something>();
    List<Something> listTwo = new List<Something>();

    void MethodOne()
    {
        lock(lockOne)
        {
            // some operation on listOne
        }
    }

    void MethodTwo()
    {
        lock(lockTwo)
        {
            // some operation on listTwo
        }
    }
}

假设 MethodOne()MethodTwo() 可以从不同线程同时调用,使用两个锁定对象是否正确,注意 listOnelistTwo 无论如何都不相关。锁中涉及的唯一操作是上面注释中指定的操作。

最佳答案

是的,这是正确的。它避免了仅仅因为另一个列表正在处理而不必要地锁定一个列表。

关于c# - 需要多个锁对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14813780/

相关文章:

c# - 单元测试适配器连接数据源失败

c# - 表达式树转换到 ICollection<T> 并添加

c# - 如何在 Azure Web App 中使用 CoreCLR 运行 ASP.NET 5 网站?

asp.net - 限制并发还是不限制并发? (在单个 ASP.NET 请求内)

c# - 有效表达式上的错误 visual studio

具有多个选择线程的 MySQL 生产者消费者

python - kivy 使用线程和 matplotlib 运行 python 代码

c - 通知父线程终止

java - 延迟执行服务

asynchronous - 等待取消异步工作流