【发布时间】:2010-12-15 21:23:21
【问题描述】:
我在 C# 中使用 lock 语句进行简单锁定。有什么方法可以确定有多少其他线程在等待锁定对象?我基本上想将等待锁的线程数限制为 5。如果第六个线程需要获得锁,我的代码会抛出异常。
【问题讨论】:
-
这听起来像是繁琐解决方案的后半部分。您要解决的实际问题是什么?
-
很难解释,但我有一个对象,它是第三方 Web 服务的包装器。诀窍是必须同步对第 3 方服务的调用,因此锁定了包装器对象。我在网站环境中使用包装器对象,因此多个线程可以尝试同时使用它。我想将等待线程队列限制为 5 个的原因是我有点担心创建 DoS 附加会多么容易。第 3 方网络服务非常慢,因此有人可以轻松发送请求,而我将有 100 个阻塞线程。
-
@Ben:听起来您需要限制的资源是系统中的线程数,而不是可以等待多少个锁我>。永远不要为每个请求创建一个线程;每个处理器创建一个线程,如果处理器用完,让客户端等待线程释放。
-
@Eric:我不确定,但 ASP.NET 不是每个请求使用 1 个线程吗?也许我错了,阻止 ASP.NET 线程会阻止我的网站为更多请求提供服务,直到线程不再被锁定。那会很糟糕。
-
@Eric:我对多线程了解不多,但是应该为每个处理器或每个内核创建 1 个线程,还是这取决于要解决的问题?
标签: c# multithreading locking