下面是一段使用锁的示例代码:
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收到请求时,可以创建一个新的工作进程。因此,如果接收到两个并发请求,并且它们在两个单独的进程上执行,那么上面的锁就没有什么用处了,我需要使用某种进程间阻塞。我的理解正确吗?
发布于 2018-06-03 03:05:31
不同的请求将由不同的线程服务,所以锁是有效的。但:当使用一个服务器场(比如多个azure web应用实例)时,这个锁只对一个实例有效。因此,在分布式编程的世界里,你必须重新考虑你的设计。太多的锁会减慢系统的速度,并且请求必须等待轮到它们。
https://stackoverflow.com/questions/50659840
复制相似问题