背景
在看代码时候,看到了这个std::atomic_flag,就搜了一下,发现提到了一个关键的词叫做无锁,找了好多它的实现机制,终于找到了,mark一下
实现方法(省流版本)
一句话总结:硬件实现
实现方法(详细版本)
在x86平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HLOCK pin,如果汇编语言的程序中在一条指令前面加上前缀"LOCK",经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指令结束时放开,从而把总线锁住,这样同一总线上别的CPU就暂时不能通过总线访问内存了,保证了这条指令在多处理器环境中的原子性。
LOCK是一个指令的描述符,表示后续的指令在执行的时候,在内存总线上加锁。总线锁会导致其他几个核在一定时钟周期内无法访问内存。虽然总线锁会影响其他核的性能,但比起操作系统级别的锁,已经轻量太多了。

无锁编程中,std::atomic_flag的实现依赖于硬件支持,如x86平台上的CPU提供的LOCK指令。该指令在执行时会锁定内存总线,确保指令的原子性,即使在多处理器环境下也能保证数据一致性。尽管总线锁会影响性能,但相比操作系统级别的锁,它更为轻量级。

918

被折叠的 条评论
为什么被折叠?



