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)]
?
最后一个解决方案会锁定所有方法吗?
答案 0 :(得分:4)
[MethodImpl(MethodImplOptions.Synchronized)]
没有过多记录,但通常会对同一类型的所有此类方法使用相同的锁对象; from MSDN:
只有一个线程可以在任何实例函数中执行,并且只有一个线程可以在任何类的静态函数中执行。
坦率地说,我从未发现该属性有用。在您的情况下,听起来您需要为这两种方法单独锁定:
private static readonly object setLock = new object(), addLock = new object();
static void swAdd(...) {
lock(addLock) {...}
}
static void swSet(...) {
lock(setLock) {...}
}