C# 锁定线程与进程

C# 锁定线程与进程,c#,iis,locking,C#,Iis,Locking,下面是一段使用锁的示例代码: public static class Account { decimal balance; private static Object thisLock = new Object(); public static void Withdraw(decimal amount) { lock (thisLock) { if (amount >

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

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

不同的线程将处理不同的请求,因此是的,锁是有效的:当使用服务器场(如多个azure web app实例)时,此锁仅对一个实例有效。因此,在分布式编程的世界中,您必须重新思考您的设计。过多的锁会降低系统速度,请求也必须等待轮到它们。

我相信每个请求都会由同一进程中的新线程处理,因此锁是有效的。为每个请求创建新进程的成本非常高。我在代码中从ThreadPool中获取了一个线程来处理此类请求。我不是在创建一个新进程,我只是想知道IIS/dotnet是否可能创建一个新进程。我想问的是锁是否总是有效的?即使有多个进程在起作用。