c# - 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
}
}
我的问题可以使用带锁的单个锁定对象吗?
解决方案
使用单个锁是安全的,但可能很慢,方法。
如果您的资源是独立的,那么一定要为每个资源使用单独的锁。
如果您需要获取多个锁,请确保始终以相同的顺序获取它们,以防止出现死锁的可能性。
推荐阅读
- reactjs - Problem trying to put a variable value into my Link to value for the URL
- python - 列表中的迭代迭代
- javascript - 使用 mocha/chai 测试几个函数回调
- firefox - Firefox 使用桌面作为移动浏览器
- python - 是否可以从 errbot 命令中获取用户输入?
- r - 使用 R 配置随机代理进行抓取
- bash - 当有人推送到 Master 时收到通知
- python - 在文件被读取并由变量分隔后将文件移动到文件夹
- ios - 保存多个事件后,并非每个 EKEvent 都会显示在日历中
- cordova - Ionic 2/3/4 AlertController radio (ionChange) 事件处理