【发布时间】:2020-06-11 07:53:18
【问题描述】:
我试图了解如何将 fetch-and-add 用作锁。以下是这本书(操作系统:3 个简单的部分)所说的:
基本操作非常简单:当 一个线程希望获得一个锁,它首先进行原子获取和添加 关于门票价值;该值现在被认为是该线程的“转” (轮到我了)。然后使用全局共享的 lock->turn 来确定 轮到哪个线程了;当 (myturn == turn) 对于给定的线程, 轮到该线程进入临界区了。
我不明白的是线程如何在进入临界区之前检查另一个进程是否持有锁。我只能读到值将增加,没有提到检查!
另一部分说:
解锁完成 只需增加轮次,使得下一个等待线程(如果 有一个)现在可以进入临界区了。
我不能以不执行检查的方式来解释,这不可能是真的,因为它包含了锁定关键部分的全部目的。我在这里想念什么?谢谢。
【问题讨论】:
标签: multithreading x86 operating-system locking mutual-exclusion