如何实现原子性

为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的总线周期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。现在我们把lock和unlock的伪代码改一下(以x86的xchg指令为例):
lock: movb $0, %al xchgb %al, mutex if(al寄存器的内容 > 0){ return 0; } else 挂起等待; goto lock;unlock: movb $1, mutex 唤醒等待Mutex的线程; return 0;
unlock中的释放锁操作同样只用一条指令实现,以保证它的原子性。


参考《linux c 编程一站式学习》。

搜索原子性即可。

猜你喜欢

转载自blog.csdn.net/GoOnDrift/article/details/43379135