以下是一段使用锁的示例代码:
public static class Account
{
decimal balance;
private static Object thisLock = new Object();
public static void Withdraw(decimal amount)
{
lock (thisLock)
{
if (amount > balance)
{
throw new Exception("Insufficient funds");
}
balance -= amount;
}
}
}
让我们说这个方法是由web api调用的。并且API托管在IIS上。我的理解是,当IIS收到请求时,可以创建一个新的工作进程。因此,如果收到两个并发请求,并且如果它们是在两个单独的进程上执行,那么上面的锁是没用的,我需要使用某种进程间阻塞。我的理解是否正确?
答案 0 :(得分:0)
不同的请求将由不同的线程服务器,所以是的,锁是有效的。 但:使用服务器场时(如多个azure Web应用程序实例),此锁只适用于一个实例。因此,在分布式编程领域,您将不得不重新考虑您的设计。太多的锁会使系统变慢,并且请求必须等待轮到他们。