都没有说到点子上。 如果确定可以编译成一条指令,那么需要加锁么? 答案是,要看编译成什么样的指令。 在单核机器上,如果可以编译成一条指令,确实无需加锁了,因为指令执行中不会被打断,但在多核机器上,两条“对于一个内存单元”的指令同时运行在两个核上,即使考虑总线时序,但如果指令是多个周期的,就不是原子的。 结论是,在多核机器上,如果指令是单周期的,就是原子的,但如果指令是多周期的,就不是原子的。 奔腾系列x86 CPU都有指令前缀lock,描述紧跟的内存操作指令,来指定此操作对总线的独享,实现存取原子性。
567
社区成员
7,024
社区内容
加载中
试试用AI创作助手写篇文章吧