C# 我可以用“吗?”;锁;跨项目?

C# 我可以用“吗?”;锁;跨项目?,c#,multithreading,locking,C#,Multithreading,Locking,我有一个项目和一个类库 我需要类库来更新存储项。在我的项目中,我需要访问这些存储项。我可以在不同项目的同一个实例上使用lock吗?这会起作用吗?只要您锁定的是真正相同的对象,就应该可以很好地工作。如果您使用不同的AppDomains,事情会变得更复杂,但是如果只是(比如)项目A和项目B都锁定了一个最初来自项目C的对象,那么这应该不会是一个问题 至少,它在技术上是可行的。就我个人而言,我通常更喜欢将锁尽可能保密-例如,与其锁定此或从其他地方获得的引用,我通常会创建一个仅用于锁定的对象: publi

我有一个项目和一个类库


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

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

至少,它在技术上是可行的。就我个人而言,我通常更喜欢将锁尽可能保密-例如,与其锁定
或从其他地方获得的引用,我通常会创建一个仅用于锁定的对象:

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

    ...
}

这样我就知道唯一能获得锁的代码是
Foo
中的代码。这使锁更容易推理。

谢谢Jon。那是故意的吗?或者,我可以在类库中重新创建“更新的”实例,然后通过事件将此实例传递给我的项目。在project中,我可以锁定存储并用更新的实例替换过时的实例。i、 e.问题是如何解决类库应该更新一些存储和project需要使用这些存储的问题…@javapowered:我需要更多的上下文来真正说明-但正如我所写的,我会尽量避免将锁暴露得太广。问题是我应该要么公开锁,要么密集地重新创建对象。因此,我更喜欢公开锁,以获得更好的性能,并减少GC的工作量(在HFT软件中使用时,这非常烦人)。