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