实时互斥锁
实时互斥锁是对互斥锁的改进,实现了优先级集成(priority inheritance),解决了优先级反转(priority inversion)的问题。
如果需要使用实时互斥锁,编译内核时需要开启配置宏CONFIG_RT_MUTEXES。
实时互斥锁的定义:
include/linux/rtmutex.h
struct rt_mutex {
raw_spinlock_t wait_lock;
struct rb_root_cached waiters;
struct task_struct *owner;
#ifdef CONFIG_DEBUG_RT_MUTEXES
int save_state;
const char *name, *file;
int line;
void *magic;
#endif
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lockdep_map dep_map;
#endif
};
初始化静态实时互斥锁的方法:
DEFINE_RT_MUTEX(mutexname)
在运行时动态初始化实时互斥锁的方法:
rt_mutex_init(mutex)
申请实时互斥锁的函数:
(1)申请实时互斥锁,如果锁被占有,进程深度睡眠
void rt_mutex_lock(struct rt_mutex *lock);
(2)申请实时互斥锁,如果锁被占有,进程轻度睡眠
int rt_mutex_lock_interruptible(struct rt_mutex *lock);
(3)申请实时互斥锁,如果锁被占有,进程睡眠等待一段时间
int rt_mutex_timed_lock(struct rt_mutex *lock, struct hrtimer_sleeper *timeout);
(4)申请实时互斥锁,如果申请成功,返回1;如果锁被其他进程占有,进程不等待,返回0
int rt_mutex_trylock(struct rt_mutex *lock);
释放实时互斥锁的函数:
void rt_mutex_unlock(struct rt_mutex *lock);