自 旋锁最初是为了在多处理器系统(SMP)使用而设计的,但是只要考虑到并发问题,单处理器在运行可抢占内核时其行为就类似于SMP。因此,自旋锁对于 SMP和单处理器可抢占内核都适用。可以想象,当一个处理器处于自旋状态时,它做不了任何有用的工作,因此自旋锁对于单处理器不可抢占内核没有意义,实际 上,非抢占式的单处理器系统上自旋锁被实现为空操作,不做任何事情。 在Linux下,信号量和线程互斥锁的实现都是通过futex系统调用。 补充: 锁定一个自旋锁的函数有四个: void spin_lock(spinlock_t *lock); 最基本得自旋锁函数,它不失效本地中断。 void spin_lock_irqsave(spinlock_t *lock, unsigned long flags); 在获得自旋锁之前禁用硬中断(只在本地处理器上),而先前的中断状态保存在fl |
linux自旋锁和futex
最新推荐文章于 2022-10-27 15:43:35 发布
本文详细探讨了Linux系统中的两种同步机制——自旋锁和futex。自旋锁在多线程环境下用于保护临界区,防止资源争抢,而futex是一种轻量级的进程间同步原语,它结合了用户空间和内核空间的操作,减少了上下文切换的开销。通过实例解析,揭示了这两种机制在并发控制中的应用和优势。
摘要由CSDN通过智能技术生成