semaphore
- 用于进程和进程之间的同步
- 允许有多个进程进入临界区代码执行
- 进程获取不到信号量锁会陷入休眠,让出cpu
- 信号量本质是基于进程调度器,UP和SMP下的实现无差异。
- 被信号量锁保护的临界区代码允许睡眠,这是和自旋锁最大的区别之一。
- 不支持进程和中断之间的同步,这是和自旋锁最大的区别之一。
spinlock
- feature
1.spinlock是一种死等的机制
2.spinlock一次只能有一个执行单元获取锁进入临界区,其他执行单元只能在门口不断死等。
3.spinlock要求执行时间短。由于死锁的特性,若临界区执行时间太长,则其它执行单元要在临界区门口不断死等,极度浪费cpu资源。
4.spinlock可以在中断上下文执行。(由于不睡眠???) - scene
1.void spin_lock(spinclock *lock)//进程和进程间的同步
2.void spin_lock_bh(spinclock *lock)//涉及和本地软中断间的同步
3.void spin_lock_irq(spinclock *lock)//涉及和本地硬件中断间的同步
4.void spin_lock_irqsave(lock,flags)//涉及和本地硬件中断间的同步并保存本地中断状态。
5.int spin_trylock(spinlock_t *lock)//尝试获取锁,成功返回0