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是否可能创建一个新进程。我想问的是锁是否总是有效的?即使有多个进程在起作用。