gpt4 book ai didi

c# - 类之间的锁共享

转载 作者:行者123 更新时间:2023-11-30 16:28:31 25 4
gpt4 key购买 nike

我正在尝试寻找在多个类之间共享锁文件的最佳实践。在此之前,我将多个函数放在同一个类中,这样它们就可以共享一个互锁文件和一个生产者/消费者队列。代码比我想要的要长一些,我想将它们分解成单独的类。当我这样做时,我无法共享锁定文件,或用于添加/删除命令的队列。

我需要一个 UI 线程来接受用户的输入,然后将命令放入工作线程可以从中提取的锁定队列中。我想将 UI 线程和辅助函数放在不同的类中,以使我的代码井井有条。

抱歉,如果这太含糊了。有没有一种方法可以在不破坏良好设计技术的情况下做到这一点?

最佳答案

如果锁在多个类之间共享,并且“所有者”不容易识别,则将这些锁放在一个共享的类中。

public class MyLocks { ... all your locks ... }

然后,当您初始化使用锁的类时,将它们传递给构造函数。或者,您可以让类自行实例化 MyLocks,然后将其公开为一个属性,然后您可以在后续构造中使用该属性。

...
var a = new ClassWithLocks();
var b = new ClassWithLocks(a.MyLocks);
var b = new SomeOtherClassWithLocks(a.MyLocks);
...

要点是将锁放入它们自己的单元中。

更新

将多个锁放入它们自己的类中的另一个好处是您可以显式创建用于获取和释放锁的方法。例如:

void PushLock(string myToken, LOCK_ENUM theLockIWant);
void PopLock(string myToken, LOCK_ENUM theLockIWant);

现在一个特定的类或操作可以请求锁,但是如果他们试图获取一个枚举数小于他们请求的锁的锁,您可以抛出异常。当您需要多个锁来执行操作时,这一点很重要,因为您可以确保按顺序获取和释放锁,这是导致死锁的最常见罪魁祸首之一。

关于c# - 类之间的锁共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7057942/

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