Linux内核同步机制
作者:网络转载 发布时间:[ 2015/9/23 10:52:19 ] 推荐标签:操作系统 接口 线程
Linux内核同步机制,挺复杂的一个东西,常用的有自旋锁,信号量,互斥体,原子操作,顺序锁,RCU,内存屏障等。这里说说它们的特点和基本用法。
自旋锁 :通用的 和读写的
特点:
1. 处理的时间很短。
2. 尝试获取锁时,不能睡眠,但是有trylock接口可以直接退出。
3. 多用在中断中。
4. 任何时候只有一个保持者能够访问临界区。
5. 可以被中断打断的(硬件和软件的)
6. 获取自旋锁后首先是关闭了抢占
spin_lock使用接口:
void spin_lock_init(spinlock_t *lock);
//init
void spin_lock(spinlock_t *lock);
// 获取锁
void spin_unlock(spinlock_t *lock);
//释放锁
其他变体
typedef struct spinlock {
union {
struct raw_spinlock rlock;
#ifdef CONFIG_DEBUG_LOCK_ALLOC
# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
struct {
u8 __padding[LOCK_PADSIZE];
struct lockdep_map dep_map;
};
#endif
};
} spinlock_t;
Rwlock: 读写自旋锁基本特点和通用自旋锁一样,但是有时候多线程频繁读取临界区如果同时只能一个那么效率会很低,它的特点是在读的时候获取读锁,可以同时有N个线程同时读,在写时需要获得写锁(不能有读和写锁)。
在读操作时,写操作必须等待;写操作时,读操作也需要的等待。这样虽然避免了数据的不一致,但是某些操作要等待,后面还会出现顺序锁,是对读写锁的优化,把写的优先级调高了
使用接口:
rwlock_init(lock);
//init
read_lock(lock);
//获取读锁
read_unlock(lock) ;
write_lock (lock);
//获取写锁
write_unlock(lock);
/*
* include/linux/rwlock_types.h - generic rwlock type definitions
* and initializers
*
* portions Copyright 2005, Red Hat, Inc., Ingo Molnar
* Released under the General Public License (GPL).
*/
typedef struct {
arch_rwlock_t raw_lock;
#ifdef CONFIG_GENERIC_LOCKBREAK
unsigned int break_lock;
#endif
#ifdef CONFIG_DEBUG_SPINLOCK
unsigned int magic, owner_cpu;
void *owner;
#endif
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lockdep_map dep_map;
#endif
} rwlock_t;
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11