semaphore 信号量
信号量的特点:
1.用于进程和进程之间的同步
2.允许有多个进程进入临界区代码执行
3.进程获取不到信号量锁会陷入休眠,并让出CPU
4.被信号量锁保护的临界区代码允许睡眠
5.本质是基于进程调度器,UP和SMP下的实现无差异
6.不支持进程和中断之间的同步
spinlock自旋锁
自旋锁的特点:
1.spinlock是一种死等的锁机制。
2.semaphore可以允许多个执行单元进入,spinlock不行,一次只能有一个执行单元获取锁并进入临界区,其他的执行单元都是再门口不断的死等。
3.执行时间短。由于spinlock死等这种特性,如果临界区执行时间太长,那么不断在临界区门口“死等”的那些执行单元是多么浪费时间啊?
4.可以在中断上下文执行。由于不睡眠,因此spinlock可以在中断上下文中适用。
小贴士:中断上下文代码不允许睡眠,也不允许调用那些可能会引起睡眠的函数!
spinlock的系列函数
void spin_lock(spinlock_t *lock) //进程和进程之间的同步
void spin_lock_bh(spinlock_t *lock) //涉及到和本地软中断之间的同步
void spin_lock_irq(spin_lock_t *lock)//涉及到和本地硬件中断之间的同步
void spin_lock_irqsave(lock,flags) //涉及到和本地硬件中断之间的同步并保存本地中断状态
int spin_trylock(spinlock_t *lock) //尝试获取锁,如果成功返回非零值,否则返回领值
Linux 内核同步简介 https://blog.csdn.net/zhoutaopower/article/details/86586527
Linux 内核同步(一):原子操作 https://blog.csdn.net/zhoutaopower/article/details/86597401
Linux 内核同步(二):自旋锁(Spinlock) https://blog.csdn.net/zhoutaopower/article/details/86598839
Linux 内核同步(三):读-写自旋锁(rwlock) https://blog.csdn.net/zhoutaopower/article/details/86605987
Linux 内核中的内存屏障:https://blog.csdn.net/zhoutaopower/article/details/86500665
Linux 内核同步(四):顺序锁(seqlock):https://blog.csdn.net/zhoutaopower/article/details/86611798
Linux 内核同步(五):信号量(semaphore):https://blog.csdn.net/zhoutaopower/article/details/86614945
Linux 内核同步(六):互斥体(mutex):https://blog.csdn.net/zhoutaopower/article/details/86627438
Linux 内核同步(七):RCU机制:https://blog.csdn.net/zhoutaopower/article/details/86646688