Skip to content

Commit

Permalink
vault backup: 2023-03-18 21:19:47
Browse files Browse the repository at this point in the history
Affected files:
notes/programming/管程模型.md
  • Loading branch information
615lyw committed Mar 18, 2023
1 parent e0bd68b commit 5eab3e1
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion notes/programming/管程模型.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ date modified: 2022-05-30, 17:26:32
- Hoare 模型
- **MESA 模型**
- 在上面两种模型中,当 `A notify B`,B 线程会立即执行,即当 B 线程执行时,之前导致 B 阻塞的条件一定得到了满足,B 只需继续执行即可
- 在 MESA 模型中,当 `A notify B`,B 线程只是从条件等待队列移入入口等待队列,由于在 B 执行之前可能有其他线程进入管程改变了条件(synchronized 为非公平锁),故 B 执行时还需要再次判断条件。(即 [[Java 中为什么 wait() 要放在循环里使用]] 的原因之一)
- 在 MESA 模型中,当 `A notify B`,B 线程只是从条件等待队列移入入口等待队列,需要和其他线程竞争锁,有可能发生:在 B 执行之前可能有其他线程进入管程改变了条件,故 B 执行时还需要再次判断条件。(即 [[Java 中为什么 wait() 要放在循环里使用]] 的原因之一)
- ![MESA 管程模型](https://pic-bed-615.oss-cn-beijing.aliyuncs.com/CleanShot%202022-06-07%20at%2018.55.16.png)

只有在 MESA 模型中提供了 `notifyAll`,另外两种模型中因为线程被唤醒后立马执行,提供不了 `notifyAll` 方法。

0 comments on commit 5eab3e1

Please sign in to comment.