设为首页 加入收藏

TOP

Linux内核同步机制之信号量与锁
2014-11-24 13:27:29 来源: 作者: 【 】 浏览:1
Tags:Linux 内核 同步 机制 信号

Linux内核同步控制方法有很多,信号量、锁、原子量、RCU等等,不同的实现方法应用于不同的环境来提高操作系统效率。首先,看看我们最熟悉的两种机制——信号量、锁。


一、信号量


首先还是看看内核中是怎么实现的,内核中用struct semaphore数据结构表示信号量(中):


其中lock为自旋锁,放到这里是为了保护count的原子增减,无符号数count为我们竞争的信号量(PV操作的核心),wait_list为等待此信号量的进程链表。


初始化:


对于这一类工具类使用较多的机制,包括用于同步互斥的信号量、锁、completion,用于进程等待的等待队列、用于Per-CPU的变量等等,内核都提供了两种初始化方法,静态与动态方式。


1) 静态初始化,实现代码如下:


可以看到,这种初始化使我们在编程的时候直接用一条语句DECLARE_MUTEX(name);就可以完成申明与初始化,另一种下面要说的动态初始化方式申请与初始化分离。


2) 我们看到,静态初始化时信号量的count值初始化为1,当我们需要初始化为0时需要用动态初始化方法。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux 设备驱动 ====> 字符驱动 下一篇JQuery.Ajax之错误调试帮助信息

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: