我们知道原子动作不能交错,因此可以使用它们而不用担心线程干扰。例如,在32位OS" x = 3"被视为原子操作"一般"但是内存访问大多需要一个以上的时钟周期,让我们说3个周期。所以情况就是这样;
假设我们有多个并行数据&地址总线和线程A试图设置" x = 3",是否有任何机会让另一个线程,比如线程B,在第二个周期中访问相同的内存位置(同时线程A)在写操作的中间)。原子性将如何保存?
希望我能够清楚。
由于
答案 0 :(得分:1)
如果在单个总线事务中执行写操作,则完全没有简单分配的问题。即使存储器写入事务需要3个周期,也会有特定的安排来阻止来自不同内核的同时总线访问。
当您执行read-modify-write
操作时会出现问题,因为这些操作涉及(至少)两个总线事务,因此此类操作可能导致核心(线程)之间的竞争条件。这些情况通过特定操作码(前缀)解决,这些操作码在下一个指令的整个持续时间内断言总线锁定信号或执行整个工作的特殊指令