TSET 是不可分割的机器代码指令,它可以做几件事。考虑其逻辑如下:
TSET(X)
if (x == 0) {
x = 1;
return true;
} else
return false;
根据经典的操作系统教科书,它是线程同步所依赖的。信号量实现可能会使用它。因为它是不可分割的,所以即使在同一个 CPU 上发生不及时的线程切换时,它也可以用来保护临界区的入口。(我)已经很好地理解了它在单个CPU 上的使用。
这就是我缺乏硬件知识的地方:如果不同 CPU 上的两个竞争线程“同时”发出相同的 TSET(x) 怎么办。这让我问是否(以及如何)每个 CPU 的 fetch 执行周期是同步的。是不是 CPU1 上的一条指令发生,然后是 CPU2 上的一条指令,然后是 CPU1 上的一条指令?这是这样做的吗?我说得有道理吗?我回答了我自己的问题吗?