锁定性能锁定多个列表
本文关键字:锁定 列表 性能 | 更新日期: 2023-09-27 17:56:48
我应该使用 2 个锁定变量还是 1 个就足够了,它会影响性能吗?如果我从多个线程调用 3 或 4 个方法怎么办?
public static class Foolocking
{
private static object _syncRoot = new object();
private static List<string> _list1;
private static List<string> _list2;
public Foolocking()
{
_list1 = new List<string>();
_list2 = new List<string>();
}
public void Method1(string s1)
{
lock (_syncRoot)
{
_list1.Add(s1);
}
}
public void Method2(string s2)
{
lock (_syncRoot)
{
_list2.Add(s2);
}
}
}
参考这一点,锁定列表 1 和列表 2 是正确的吗?
在多线程方案中正确锁定列表
我应该使用 2 个锁定变量还是 1 个就足够了,它会影响性能吗?
如果使用两个锁定变量,则可以同时从单独的线程添加每个列表。
如果使用单个锁定变量,则两个线程将相互等待。 这可能会导致更多的线程争用,从而降低整体吞吐量。
每个对象的单独锁定变量可能会以更高的复杂性为代价来提高性能。 话虽如此,如果您在单个方法中使用两个列表,并且需要锁定它们,则两个锁定变量会增加死锁的可能性,因此需要格外小心。
锁定非常快(如果我没记错的话,几纳秒)。 3-4 个锁不是一个真正的问题。
或者换句话说 - 如果 4 个锁对于您的应用程序来说太慢了 - 您需要完全改变方法并寻找无锁算法,这很重要。
我会说一百把锁似乎很可疑,但 3-4 我什至不会浪费时间去问它。