文档章节

内核同步机制之Mutex Exclusion

兔之
 兔之
发布于 2014/01/03 23:22
字数 498
阅读 70
收藏 0

S3C2440在内核版本2.6.34下开发ADC驱动时,会发现驱动程序里用了互斥通信来实现同步:

<!-- lang: cpp -->
DECLARE_MUTEX(ADC_LOCK);
static int OwnADC = 0;

在wikipedia中式这么定义Mutex Exclusion的:

In computer science, mutual exclusion refers to the requirement of ensuring that no two processes or threads (henceforth referred to only as processes) are in their critical section at the same time. Here, a critical section refers to a period of time when the process accesses a shared resource, such as shared memory.

专业的表达也可以是这样:

A data structure for mutual exclusion, also known as a binary semaphore. A mutex is basically just a multitasking-aware binary flag that can be used to synchronize the activities of multiple tasks. As such, it can be used to protect critical sections of the code from interruption and shared resources from simultaneous use.

互斥体是表现互斥现象的数据结构,也被当作二元信号灯。一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源。

##使用## Linux内核的同步机制里面: 辅助宏:

<!-- lang: cpp -->
DECLARE_MUTEX(name); /*声明一个互斥锁,把名为name的信号量变量初始化为1 */
DECLARE_MUTEX_LOCKED(name); /* 声明一个互斥锁,把名为name的信号量变量初始化为0 */

在Linux世界中, P函数被称为down, 指的是该函数减小了信号量的值, 它也许会将调用者置于休眠状态, 然后等待信号量变得可用, 之后再授予调用者对被保护资源的访问权限.

<!-- lang: cpp -->
void down(struct semaphore *sem);

当一个线程成功调用down函数后, 就称为该线程拥有了该信号量, 可以访问被该信号量保护的临界区. 当互斥操作完成后, 必须释放该信号量. Linux的V函数是up:

<!-- lang: cpp -->
void up(struct semaphore *sem)

调用up之后, 调用者不再拥有该信号量

##Reference## [1].Linux Device Drivers.Thirth Edition.P112-P114

© 著作权归作者所有

上一篇: WordPress文件结构
下一篇: Start a Daemon
兔之
粉丝 69
博文 250
码字总数 96477
作品 7
深圳
程序员
私信 提问
Android的进程通信及同步机制

一、 IPC经典实现 进程间通信(Inter-process communication, IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交互。Android中有以下几种方式: 共享内存(Shared Memo...

liaowenhao
2017/11/26
0
0
用C++实现多线程Mutex锁(Win32)

本文目的:用C++和Windows的互斥对象(Mutex)来实现线程同步锁。 准备知识:1,内核对象互斥体(Mutex)的工作机理,WaitForSingleObject函数的用法,这些可以从MSDN获取详情; 2,当两个或...

鉴客
2011/12/10
7K
1
VC++线程同步(三) 临界区使用例子

临界区(Crtical Section)同步对象 用户模式下的同步对象 Win32中,最容易使用的一个同步机制就是(关键段)Critical Section, 某些共享资源具有互斥性,也就是它要求被互斥地使用,他也是用于资源...

超级极客
2017/07/25
0
0
每日科技英文30: 可再入性和线程的互斥

今日要点: 可再入性及线程互斥的定义 疑问代词(5个)+ever,表示:不论/无论....,都/就... Reentrant(可再入的) Said of software that can be executed multiple times simultaneously.(缺...

随风而行之青衫磊落险峰行
2017/11/28
0
0
内核同步-锁机制

在Linux系统上,多个进程可以同时运行,以及各种中断发生的中断也在同时得到处理,这种多个上下文宏观上同时运行的情况称为并发。并发具体包括如下几种可能: 1) UP平台上,一个进程正在执行...

kaedehao
2016/03/05
119
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部