gpt4 book ai didi

c# - 嵌入式锁是否会针对竞争条件增加任何值(value)?

转载 作者:行者123 更新时间:2023-12-03 13:14:15 25 4
gpt4 key购买 nike

我最近在我的代码中遇到了一些竞争条件,我想知道二级/三级锁是否真的增加了任何值(value)。它们看起来非常多余,this SO post似乎与我的思考过程一致,声明:

In order to prevent race conditions from occurring, you would typically put a lock around the shared data to ensure only one thread can access the data at a time. This would mean something like this:

obtain lock for x ... release lock for x


给定这个从集合中删除空队列的简单示例:
Dictionary<Guid, Queue<int>> _queues = new Dictionary<Guid, Queue<int>>();

...

lock (_queues) {
while (_queues.Any(a => a.Value.Count == 0)) {
Guid id = _queues.First(f => f.Value.Count == 0);
if (_queues.ContainsKey(id))
lock (_queues)
_queues.Remove(id);
}
}
第二把锁是否提供任何值(value)?

最佳答案

在您发布的代码中,不,第二个锁不会添加任何值,因为如果不先执行 while 循环就无法访问该代码,此时互斥锁已经被锁定。
可能需要注意的是,将它放在那里并没有什么坏处,因为 C# locks are reentrant .
第二个锁确实增加值(value)的地方是在代码中,不清楚是否总是会获得第一个锁。例如:

void DoWork1()
{
lock(_queues)
{
//do stuff...
if(condition)
DoWork2();
}
}

void DoWork2()
{
lock(_queues)
{
//do stuff...
}
}

关于c# - 嵌入式锁是否会针对竞争条件增加任何值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65834983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com