【发布时间】:2012-03-24 01:33:54
【问题描述】:
我无法想象一个架构会设计一种在多条指令中对其最小数据类型的访问,但也许流水线存在一些我没有考虑的问题?
【问题讨论】:
-
C 和 C++ 都没有“指令”的概念,因此他们无法对此做出任何保证。另外,“一条指令”和“多个时钟周期”并不相互排斥。
-
我不知道你在想什么,但是“一条指令”与“一个时钟周期”是完全不同的。对于大多数 CPU,大多数指令都需要多个周期。
-
你绝对需要一个互斥体,不管
bool访问是否是一条指令。在其他潜在的惊喜中,如果您不使用锁,则不能保证不同的线程以相同的顺序看到来自其他线程的写入。数据竞争是未定义的行为:一旦代码被优化器破坏,各种错误都可能蔓延。 -
如果你发现写入 bool 需要超过一个指令/时钟周期,你会怎么做?
-
@SteveJessop 对于大多数现代通用机器,每个时钟周期有不止一条指令。过去,RISC 机器每个时钟周期有一条指令,而 CISC 机器需要几个时钟周期来处理一条指令——在除法的情况下,有时需要数百个时钟周期。在现代机器上,流水线和多个并行执行单元意味着每个时钟通常可以执行多个指令。或者更准确地说,这个概念甚至没有真正的意义。