Linux内核当中的互斥锁
来源:互联网 发布:淘宝分销网址 编辑:程序博客网 时间:2024/05/16 07:02
Linux可以使用互斥信号量来表示互斥锁,那就是通过宏DECLARE_MUTEX来定义一个互斥信号量,因为DECLARE_MUTEX这个宏,Marcin Slusarz在08年提交的了一个patch,邮件地址为:https://lkml.org/lkml/2008/10/26/74,Marcin Slusarz认为DECLARE_MUTEX宏会误导开发者,所以建议将DECLARE_MUTEX修改成DEFINE_SEMAPHORE,这个提议最终被内核社区所接受,在2.6.36版本后的内核就没有DECLARE_MUTEX这个宏了,取而代之的是DEFINE_SEMAPHORE宏,在后来同互斥信号量相关的init_MUTEX、init_MUTEX_LOCKED也从<linux/semaphore.h>文件中移除了。
虽然可以使用信号量来表示互斥锁,但是互斥锁其实是存在的,只是前面的宏DECLARE_MUTEX因为会引起歧义,所以修改成了DEFINE_SEMAPHORE,mutex在2.6.16版本就融入到了主内核中了,使用mutex需要包含头文件<linux/mutex.h>,例如:
使用宏DEFINE_MUTEX静态定义和初始化一个互斥锁,如果需要动态初始化,那么使用函数mutex_init(),原型如下:
mutex_lock和mutex_unlock分别是对临界区进行加锁和解锁,机制同信号量都差不多,在临界区不能被访问是引起进程的休眠而不是忙等。同信号量一样,mutex也有mutex_lock_interruptible和mutex_trylock,所有的函数原型如下:
虽然可以使用信号量来表示互斥锁,但是互斥锁其实是存在的,只是前面的宏DECLARE_MUTEX因为会引起歧义,所以修改成了DEFINE_SEMAPHORE,mutex在2.6.16版本就融入到了主内核中了,使用mutex需要包含头文件<linux/mutex.h>,例如:
/* Statically declare a mutex. To dynamically create a mutex, use mutex_init() */static DEFINE_MUTEX(mymutex);/* Acquire the mutex. This is inexpensive if there * is no one inside the critical section. In the face of * contention, mutex_lock() puts the calling thread to sleep. */ mutex_lock(&mymutex); /* Critical Section code ... */ mutex_unlock(&mymutex);/* Release the mutex */
使用宏DEFINE_MUTEX静态定义和初始化一个互斥锁,如果需要动态初始化,那么使用函数mutex_init(),原型如下:
void mutex_init(struct mutex *mutex);
mutex_lock和mutex_unlock分别是对临界区进行加锁和解锁,机制同信号量都差不多,在临界区不能被访问是引起进程的休眠而不是忙等。同信号量一样,mutex也有mutex_lock_interruptible和mutex_trylock,所有的函数原型如下:
void mutex_lock(struct mutex *lock); int mutex_lock_interruptible(struct mutex *lock); int mutex_trylock(struct mutex *lock); void mutex_unlock(struct mutex *lock);
0 0
- Linux内核当中的互斥锁
- linux各版本内核当中的多点触摸驱动
- 内核当中的test_bit宏
- linux内核当中的2410单点触摸驱动在线阅读地址
- Linux当中read的使用
- Linux脚本当中的read命令
- Linux当中的memory、cache、buffer、swap
- Linux当中Process与Thread的概念
- Linux当中的一些名词理解
- Linux的ssh连接当中的非对称式加密
- 常见的设备在linux当中的文件名
- 如何在Linux当中判断USB控制器的类型
- Linux当中while,util循环条件表达式的格式
- 变长数组在Linux USB当中的应用
- LINUX 当中 who am i 和 whoami 的区别
- SecureCRT连接本地虚拟机当中的Linux系统
- 如何在linux当中,大量的添加用户
- Linux 4.10当中将带来深远影响的三项小改变
- EXP-00008: ORACLE error 904 encountered
- 写内核定时器时,出现的警告及改正
- Lua的tabel,,查找字符串和值
- HDU1787
- CCScrollView添加滚动条和滚动背景
- Linux内核当中的互斥锁
- Effective C++:条款32:确定你的public继承塑模出is-a关系
- centos yum配置
- android动态设置控件的高宽
- mysql transaction(事务)
- Android Asynchronous Http Client--Android 开源的网络异步加载类
- 2014首届国产软件产业链合作峰会在京召开
- php创建缩略图
- iOS设备连接电脑时在对话框中误点“不信任”