制作网站需要域名还需要什么,本地wordpress后台很慢,wordpress中文备份,科技风格网站总结#xff1a; 多CPU下的自旋锁采取的是忙等待#xff08;原地打转#xff09;机制#xff0c;虽然忙等待的线程占用了它所在的cpu#xff0c;但其他线程仍可放到其他CPU上执行。所以自旋锁上锁和解锁之间的临界区代码要尽量的短#xff0c;最好不要超过5行#xff0c… 总结 多CPU下的自旋锁采取的是忙等待原地打转机制虽然忙等待的线程占用了它所在的cpu但其他线程仍可放到其他CPU上执行。所以自旋锁上锁和解锁之间的临界区代码要尽量的短最好不要超过5行否则采取忙等待的线程会浪费过多的cpu资源。
单cpu下的自旋锁采用的是睡眠机制因为忙等待会使仅有可怜的一个cpu被其占用而拥有自旋锁的线程得不到执行无法释放锁会引起死锁。 关于自旋锁的一些函数接口
spin_lock函数在内核文件include\linux\spinlock.h中声明如下表
函数名作用spin_lock_init(_lock)初始化自旋锁为unlock状态void spin_lock(spinlock_t *lock)获取自旋锁(加锁)返回后肯定获得了锁int spin_trylock(spinlock_t *lock)尝试获得自旋锁成功获得锁则返回1否则返回0void spin_unlock(spinlock_t *lock)释放自旋锁或称解锁int spin_is_locked(spinlock_t *lock)返回自旋锁的状态已加锁返回1否则返回0
自旋锁的加锁、解锁函数是spin_lock、spin_unlock还可以加上各种后缀这表示在加锁或解锁的同时还会做额外的事情
后缀描述_bh()加锁时禁止下半部(软中断)解锁时使能下半部(软中断)_irq()加锁时禁止中断解锁时使能中断_irqsave/restore()加锁时禁止并中断并记录状态解锁时恢复中断为所记录的状态