加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

一篇文章告诉你Linux驱动7-内核互斥锁

发布时间:2021-05-22 14:33:45 所属栏目:Linux 来源:互联网
导读:互斥体概述 信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作。信号量的count初始化为1,down()/up()也可以实现类似mut

 *   locks and tasks (and only those tasks) 

 */ 

struct mutex { 

  /* 1: unlocked, 0: locked, negative: locked, possible waiters */ 

  atomic_t    count

  spinlock_t    wait_lock; 

  struct list_head  wait_list; 

#if defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_SMP) 

  struct task_struct  *owner; 

#endif 

#ifdef CONFIG_MUTEX_SPIN_ON_OWNER 

  void      *spin_mlock;  /* Spinner MCS lock */ 

#endif 

#ifdef CONFIG_DEBUG_MUTEXES 

  const char     *name

  void      *magic; 

#endif 

#ifdef CONFIG_DEBUG_LOCK_ALLOC 

  struct lockdep_map  dep_map; 

#endif 

}; 

作用及访问规则:

互斥锁主要用于实现内核中的互斥访问功能。内核互斥锁是在原子 API 之上实现的,但这对于内核用户是不可见的。

对它的访问必须遵循一些规则:同一时间只能有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁。互斥锁不能进行递归锁定或解锁。一个互斥锁对象必须通过其API初始化,而不能使用memset或复制初始化。一个任务在持有互斥锁的时候是不能结束的。互斥锁所使用的内存区域是不能被释放的。使用中的互斥锁是不能被重新初始化的。并且互斥锁不能用于中断上下文。

互斥锁比当前的内核信号量选项更快,并且更加紧凑。

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读