我有一个包含这三个方法的类。这个类被许多线程使用。如果Method 2和/或Method 3正在任何线程中运行,我希望Method 1等待。有什么建议吗?
public class Class1
{
public static void Method1()
{
Object lockThis = new Object();
lock (lockThis)
{
//Body function
}
}
public static void Method2()
{
//Body function
}
public static void Method3()
{
//Body function
}
}
5条答案
按热度按时间rslzwgfq1#
如果我理解正确的话,你需要这样的东西:
这允许method3在method2正在运行时执行,反之亦然,而method1必须等待两者。当然,当1正在运行时,method2和3将不会运行。
lskq00tm2#
你的锁的当前实现是完全无用的,因为每个线程将锁定不同的对象。
锁定通常使用只读字段完成,该字段仅初始化一次。
像这样,你可以很容易地锁定多个方法:
cmssoen23#
我建议使用
ReaderWriterLockSlim
(http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx)类似于读取操作,方法2和方法3可以并行发生,而方法1(类似于写入操作)将需要等待这些操作完成。这不是常规的读/写并发情况,但逻辑是相似的。
disbfnqx4#
如果你是多线程的,那么
lock
必须对所有线程都是可访问的。因此,在这种情况下,您的锁需要是静态的,以便静态方法可以看到它。您当前的设置将为每个线程创建一个新的锁对象。因此,现在提供同步。
6tdlim6h5#
如果我正确理解了你的要求,那么你可以这样做: