首页 > 解决方案 > 锁定线程与进程

问题描述

这是一段使用锁的示例代码:

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 收到请求时,可以创建一个新的工作进程。因此,如果收到两个并发请求,并且它们正在两个单独的进程上执行,那么上面的锁就没有什么用了,我需要使用某种进程间阻塞。我的理解正确吗?

标签: c#iislocking

解决方案


不同的请求将由不同的线程提供服务,所以是的,锁是有效的。但是:当使用服务器场(如多个 azure Web 应用程序实例)时,此锁仅适用于一个实例。因此,在分布式编程的世界中,您将不得不重新考虑您的设计。太多的锁会减慢系统的速度,并且请求必须等待轮到它们。


推荐阅读