【问题标题】:Can I use "lock" across projects?我可以跨项目使用“锁定”吗?
【发布时间】:2012-08-11 11:42:09
【问题描述】:

我有一个项目和一个类库。

我需要类库来更新存储项。在我的项目中,我需要访问这些存储项目。我可以在来自不同项目的同一个实例上使用lock 吗?这样可以吗?

【问题讨论】:

    标签: c# multithreading locking


    【解决方案1】:

    只要您锁定的是真正相同的对象,那绝对可以正常工作。如果您使用不同的 AppDomain,事情会变得更加复杂,但如果只是(比如说)项目 A 和项目 B 都锁定了一个最初来自项目 C 的对象,那应该不是问题。

    至少,它会在技术上工作。就我个人而言,我通常更喜欢尽可能保持锁的私密性——例如,我不会锁定this 或从其他地方获得的引用,而是经常创建一个唯一目的是锁定的对象:

    public class Foo
    {
        private readonly object mutex = new object();
    
        ...
    }
    

    这样我就知道唯一 可以获取该锁的代码是Foo 中的代码。它使锁更容易推理。

    【讨论】:

    • 感谢乔恩。设计上会那么好吗?或者,我可以在类库中重新创建“更新”实例,而不是通过事件将此实例传递给我的项目。在项目中,我可以锁定存储并用更新的实例替换过时的实例。即问题是如何解决类库应该更新一些存储和项目需要使用该存储的问题......
    • @javapowered: 我需要一个 很多 更多的上下文才能真正说 - 但正如我所写,我会 try 避免暴露锁广泛。
    • 问题是我应该要么公开锁,要么密集地重新创建对象。所以我更喜欢暴露锁来获得更好的性能并减少 GC 的工作(这在 HFT 软件中使用时非常烦人)。
    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    相关资源
    最近更新 更多