首页 > 解决方案 > C#中线程同步的单锁对象或多锁对象

问题描述

我有一个类,它有一些字典对象和其他需要保护的数据。这些由多个线程(读取和写入)操作。我不确定我应该使用单个锁定对象来锁定所有数据还是每个数据应该有不同的锁定?在我的情况下,缓慢的性能比死锁更可取。

    static object object1 = new object();
    static object object2 = new object();
    private Queue<Change> changeNotifications = new Queue<Change>();
    private Dictionary<string, IConnectionClient> connectionClients1 = new Dictionary<string, IConnectionClient>(StringComparer.OrdinalIgnoreCase);
    private Dictionary<string, IConnectionClient> connectionClients2 = new Dictionary<string, IConnectionClient>(StringComparer.OrdinalIgnoreCase);

    public static void ThreadFunction1()
    {
        lock (object1)
        {
            //update connectionClients2
        }
    }

    public static void ThreadFunction2()
    {
        lock (object2)
        {
            //access changeNotifications
            //update connectionClients1
        }
    }

我的问题可以使用带锁的单个锁定对象吗?

标签: c#multithreading

解决方案


使用单个锁是安全的,但可能很慢,方法。

如果您的资源是独立的,那么一定要为每个资源使用单独的锁。

如果您需要获取多个锁,请确保始终以相同的顺序获取它们,以防止出现死锁的可能性。


推荐阅读