c# - 锁定线程与进程

标签 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 > balance)  
            {  
                throw new Exception("Insufficient funds");  
            }  
            balance -= amount;  
        }  
    }  
} 

假设此方法由网络 API 调用。 API 托管在 IIS 上。我的理解是,当 IIS 收到请求时,可以创建一个新的工作进程。因此,如果收到两个并发请求,并且它们在两个单独的进程上执行,那么上面的锁就毫无用处,我需要使用某种进程间阻塞。我的理解正确吗?

最佳答案

不同的请求将由不同的线程处理,所以是的,锁是有效的。 但是:当使用服务器场时(如多个 azure web 应用程序实例),此锁将仅对一个实例有效。因此,在分布式编程的世界中,您将不得不重新考虑您的设计。太多的锁会降低系统速度,请求必须等待。

关于c# - 锁定线程与进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659840/

相关文章:

ruby-on-rails - with_lock 会锁定 block 内的所有内容吗?

c# - 需要正则表达式模式来捕获公式片段

c# - 如何将多选属性值发送到 Acumatica

asp.net - VB.Net Web 方法给出 HTTP401 未授权错误

asp.net-mvc - 使用 IIS 自签名证书,但表单数据仍然是纯文本

c - `pthread_mutex_trylock` 两个线程同时调用时阻塞

c# - 如何锁定多个对象?

C# - Json POST 请求已发送但未被 PHP 服务器接收

c# 字符串转十六进制,十六进制转字节

.net - HttpContext.Current.Cache - 什么时候会自动清除?