Linux 锁介绍
2022/1/15 7:10:27
本文主要是介绍Linux 锁介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux 同步方法
1.原子操作
原子操作可以保证指令以原子的方式进行,执行过程中不被打断,通常用来对单个变量进行计数使用
头文件
#include <linux/types.h> typedef struct { int counter; } atomic_t; #ifdef CONFIG_64BIT typedef struct { long counter; } atomic64_t; #endif 初始化原子变量为0: atomic_t x = ATOMIC_INIT(0);
1.32位原子操作
2.64位原子操作
3.原子位操作
2.自旋锁
自旋锁的作用是当某一段代码只能被单线程原子执行时,我们就可以用到自旋锁,如果一个线程试图获取一个已经被持有的自旋锁的时候,改线程会一直进行忙循环–旋转–等待锁重新可用(浪费处理器时间),如果锁未被使用,请求锁的线程可以立即得到该锁。
如果使用自旋锁自旋锁不应该被线程长时间持有,同一时刻只能有一个线程能持有锁
头文件
#include <linux/spinlock.h> 初始化lock #define spin_lock_init(_lock) \ do { \ spinlock_check(_lock); \ raw_spin_lock_init(&(_lock)->rlock); \ } while (0)
3.读写锁
读写锁的作用:当需要并发的对数据进行读操作,可以使用到读写锁中的读锁,而写锁只能由一个获取,也就是说多线程并行读时,可以使用读锁
使用读锁后没释放读锁不能使用写锁,同一时刻只能有一个线程能持有写锁
头文件
#include <linux/rwlock.h> 初始化 #define DEFINE_RWLOCK(x)
4.信号量
信号量是一个睡眠锁,当一个任务获取一个被占用的信号量时,信号量会将该任务放入等待队列。cpu转去做其他任务,当忙信号量被释放后,任务重新被激活
信号量用于处理锁可能长时间睡眠时,可以使用该锁。
同一时刻持有锁的任务数可以由计数信号量指定。内核一般都是用计数为一的数值,也就是同一时刻只能由一个任务可以持有锁
头文件
#include <linux/semaphore.h> struct semaphore sem; sema_init(struct semaphore *sem, int val) //val->count
5.读写信号量
读写信号量与读写锁性质差不多。读写信号量都是互斥信号量,只要没有写者,并发获取读锁的读者不限,只有唯一写者
头文件
#include <linux/rwsem.h>
6.互斥体
实现互斥特定睡眠锁,是一个互斥体,任何时刻只有一个任务可以获取互斥体,互斥体不能在中断或者下半部中使用
文件
#include <linux/rwsem.h>
这篇关于Linux 锁介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法