锁定队列用户工作项

本文关键字:工作 用户 队列 锁定 | 更新日期: 2023-09-27 18:35:04

这里有一个简单的线程练习。假设我有一个静态锁、一个 Web 请求和一个线程队列线程。以下情况是否会导致问题(忽略代码本身的质量):

static object locker = new object();
static MyObject obj = new MyObject();
public static void Update(){
   lock(locker){
      obj.Foo = "biz";
      DoStuff();
   }
}
public static void DoStuff(){
   ThreadPool.QueueUserWorkItem(args => {
      lock(locker){
         obj.Foo = "bar";
      }
   });
}

这个例子是人为的,但这个概念:)成立。

锁定队列用户工作项

这不会引起问题。 如果调用一次,DoStuff()将无法获取锁,直到Update()的代码退出锁。 但是,ThreadPool.QueueUserWorkItem是异步调用,因此锁将能够释放,这反过来又允许DoStuff()进行处理。

不应该

。 线程池线程特有的唯一问题是线程池增长相对较慢,因此如果您阻塞了很多等待锁定的内容,可能会导致性能问题。