gpt4 book ai didi

c# - 基于参数锁定

转载 作者:太空狗 更新时间:2023-10-29 17:49:52 25 4
gpt4 key购买 nike

假设我有这个方法:

void Foo(int bar)
{
// do stuff
}

这是我希望 Foo 具有的行为:

  1. 如果线程 1 调用 Foo(1) 并且线程 2 调用 Foo(2) ,两个线程可以同时运行。

  2. 如果线程 1 调用 Foo(1) 并且线程 2 调用 Foo(1) ,两个线程不能并发运行。

.net 中是否有一种好的、标准的方法来指定这种类型的行为?我有一个使用对象字典来锁定的解决方案,但感觉有点乱。

最佳答案

使用字典为不同的参数提供不同的锁对象。在实例化底层对象时设置字典(或静态地,如果适用):

var locks = new Dictionary<int, object>() {
{1, new Object()},
{2, new Object()},

};

然后在你的方法中使用它:

void Foo(int bar) {
lock (locks[bar]) {

}
}

我不会说这个解决方案很困惑,相反:提供精细的锁粒度是值得称赞的,并且由于值类型上的锁在 .NET 中不起作用,因此拥有一个映射是显而易见的解决方案。

不过要小心:以上仅在字典未被同时修改和读取时才有效。因此,最好在设置字典后将其视为只读。

关于c# - 基于参数锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6456998/

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