2
internal static void ExecuteCommand(NLO nlo)
{
    switch (nlo.action)
    {
        //synchronize each method in case
        case (NLO.Actions.SET):
            swSet(nlo);
            break;
        case (NLO.Actions.ADD):
            swAdd(nlo);
            break;
        default:
            throw new System.Exception("Error");
            //break;
    }
    return;
}

我想锁定每个方法swSet并且swAdd能够并行运行,但锁定swSet不能与自身并发运行,并且对于swAdd

最简单的方法是在每种情况下加锁还是在方法本身或方法上加锁[MethodImpl(MethodImplOptions.Synchronized)]

最后一个解决方案会锁定所有方法吗?

4

1 回答 1

4

[MethodImpl(MethodImplOptions.Synchronized)]没有过度记录,但通常会为同一类型的所有此类方法使用相同的锁对象;来自 MSDN

只有一个线程可以在任何实例函数中执行,并且只有一个线程可以在任何类的静态函数中执行。

坦率地说,我从来没有发现这个属性有用。在您的情况下,听起来您需要为两种方法单独锁定:

private static readonly object setLock = new object(), addLock = new object();

static void swAdd(...) {
    lock(addLock) {...}
}
static void swSet(...) {
    lock(setLock) {...}
}
于 2013-02-14T10:43:48.590 回答