原子函数在一条简单的指令中执行。它们不能在中游中断。如果同时请求两个操作,则必须在第二个操作之前完成。它从不睡觉。 在十五级管道处理器上,我怎么能确定原子功能的原子执行?原子操作对性能有不良影响吗?
Linux有很多原子功能完成,因为一条指令有类型:
typedef struct {
volatile int counter;
} atomic_t;
它定义为SMP-safe。 Hove是否可以在超标量上使用SMP安全原子?
答案 0 :(得分:2)
让我们从 atomic 在计算机科学中的含义开始。如果操作是不可分割的,则操作是原子操作。这意味着它要么完全发生,要么根本不发生。此外,在部分完成状态下,操作永远不可见。
在超级计算器处理器上实现原子操作的一种方法是将原子指令视为屏障。在原子指令可以执行之前,所有先前的指令必须完成执行。此外,在原子指令完成之前,原子指令之后没有指令可以开始执行。超级分频器处理器实际上变成了用于原子指令的非超级分频器处理器。
这是2000年初在SPARC处理器上实现原子指令的方式。它起作用,但性能影响是可测量的。
原子指令通常在访问内存时锁定总线。这使得其他内核在原子指令完成时不会读取或写入内存。因此,其他核心不会在部分完成的状态下观察指令。