C#中资源被锁定时其他线程的行为是怎样的?
线程锁定资源时其他线程的行为
当一个线程通过lock语句锁定某个资源对象时,其他线程的表现分两种情况:
- 若其他线程尝试锁定同一个对象:这些线程会直接进入阻塞状态,完全空闲,不会去执行任何新任务,直到持有锁的线程执行完
lock块内的代码、释放锁为止。此时线程会被操作系统挂起,直到锁可用时才会被唤醒并尝试获取锁。 - 若其他线程锁定的是不同对象:完全不受影响,正常执行自己的逻辑,和持有锁的线程互不干扰。
要特别注意:lock是同步阻塞机制,和异步编程的逻辑完全不同。异步编程里的await会释放当前线程,让线程可以去处理其他任务;但lock阻塞时,线程会被挂起,期间不会做任何有效工作,只能等待锁释放。
C#代码示例:
lock (referenceType) { // 执行需要同步的代码 }
内容的提问来源于stack exchange,提问作者user19291301
相关产品推荐
相关产品推荐

