蜗牛哒哒

LINUX教程-LINUX编程-自旋锁

作者: 蜗牛哒哒 发布时间: 2020-12-16 150 人阅读

自旋锁最多只能被一个可执行线程持有。自旋锁不会引起调用者睡眠,如果一个执行线程试图获得一个已经被持有的自旋锁,那么线程就会一直进行忙循环,一直等待下去,在那里看是否该自旋锁的保持者已经释放了锁,“自旋”就是这个意思。
spin_lock_init(x)
该宏用于初始化自旋锁x,自旋锁在使用前必须先初始化。

spin_lock(lock)
获取自旋锁lock,如果成功,立即获得锁,并马上返回,否则它将一直自旋在那里,直到该自旋锁的保持者释放。
spin_trylock(lock)
试图获取自旋锁lock,如果能立即获得锁,并返回真,否则立即返回假。它不会一直等待被释放。

spin_unlock(lock)
释放自旋锁lock,它与spin_trylock或spin_lock配对使用。
信号量PK自旋锁
信号量最多可以允许多个持有者,而自旋锁在任何时候只能允许一个持有者。当然也有信号量叫互斥信号量(只能一个持有者),允许有多个持有者的信号量叫计数信号量。

信号量适合于保持时间较长的情况;而自旋锁适合于保持时间非常短的情况,在实际应用中自旋锁控制的代码只有几行,而持有自旋锁的时间也一般不会超过两次上下文切换的时间,因为线程一旦要进行切换,就至少花费切出切入两次,自旋锁的占用时间如果远远长于两次上下文切换,我们就应该选择信号量。

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.本站所有资源不保证完整性,仅供参考学习!
3. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
4. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
5. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
6. 如有链接无法下载、失效或广告,请联系管理员处理!
7. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
8. 如遇到加密压缩包,默认解压密码为"woniudada",如遇到无法解压的请联系管理员处理!
蜗牛哒哒 » LINUX教程-LINUX编程-自旋锁