init_MUTEX

2.6.25及以后的linux内核版本废除了init_MUTEX函数

新版本使用sema_init函数

平台:X86 32位
内核:2.6.24
定义

引用

static inline void init_MUTEX (struct semaphore *sem) 

        sema_init(sem, 1); 
}

说明:Init_MUTEX()函数初始化信号量为互斥量。 互斥量为信号量的特例,它可以防止数据被两个不同系统调用读写。

sema_init (sem, 1) 定义为:

引用

static inline void sema_init (struct semaphore *sem, int val)
{
/*
*    *sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val);
*
* i‘d rather use the more flexible initialization above, but sadly
* GCC 2.7.2.3 emits a bogus warning. EGCS doesn‘t. Oh well.
*/
    atomic_set(&sem->count, val);
    sem->sleepers = 0;
    init_waitqueue_head(&sem->wait);
}

sleepers : 指定了允许进入等待进入临界区的进程数,这里初始化为 0 。
init_waitqueue_head() : 初始化一个等待队列头。

这样不难得出

废除 init_MUTEX 后

将原来使用 init_MUTEX(sem)的地方统统替换为sema_init(sem, 1); 即可

时间: 2024-12-15 10:31:11

init_MUTEX的相关文章

linux设备驱动第五篇:驱动中的并发与竟态

综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争. 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时.并行被执行.而并发的执行单元对共享资源(硬件资源和软件上的全局.静态变量)的访问则容易导致竞态(race conditions).可能导致并发和竟态的情况有: SMP(Symmetric Multi-Processing),对称多处理结构.SMP是一种紧耦合.共享存储的系统模型,它的特点是多个CPU使用共

20150218【改进信号量】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进信号量]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 前面我们使用POLL查询方式来实现GPIO-IRQ按键中断程序 这里我们来使用信号量,让我们的驱动同时只能有一个应用程序打开. 一.首先在前面代码的基础上来一个简单的信号 1.定义一个全局的整形变量 2.在打开函数中,每次进入打开函数canopen都自减1, 3.当我们不使用时,在realease 中canopen自加1 4.这样就实现了一个简单的信号量,我们编译,测试 当我们使用两个应用程序来

字符设备驱动程序之同步互斥阻塞

目的:在同一时刻,只有一个应用程序打开/dev/buttons 驱动程序: #include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#include <asm/uaccess.h>#include &l

SPI设备的驱动

主要包括两个SPI设备步骤:register_chrdevspi_register_driver关键点1:spi_board_info可以去已经运行的板子下面找例子:/sys/bus/spi/drivers已辰汉电子MX27 MDK 开发板为例:在/sys/bus/spi/drivers目录:lcd_spi pmic_spi 对应的:mx27mdk27v0.c文件中定义如下: static struct spi_board_info mxc_spi_board_info[] __initdata

linux并行与竞态

内核态的竞态与并行 中断屏蔽: local_irq_save(flags) local_irq_restore(flags) Telnet 192.168.x.x登录开发板 #if 0 ...... #endif 原子操作 原子操作指的是在执行过程中不会被别的代码所中断的操作. 分为 位 和 整型变量 两类原子操作. void atomic_set(atomic_t *v, int i);   //设置原子变量v的值为i atomic_t v = ATOMIC_INIT(0);         

Linux驱动platform

platform device<==> platform bus <==> platform driver 转自:platform设备驱动全透析 宋宝华 http://blog.csdn.net/21cnbao/article/details/5615421 1.1 platform总线.设备与驱动 在Linux 2.6的设备驱动模型中,关心总线.设备和驱动这3个实体,总线将设备和驱动绑定.在系统每注册一个设备的时候,会寻找与之匹配的驱动:相反的,在系统每注册一个驱动的时候,会寻找

从java层到framework到JNI到HAL到kernel的hello 例子

转载自 http://blog.csdn.net/Luoshengyang/article/category/838604/3 在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Androi

Linux 内核的同步机制,第 1 部分 + 第二部分(转)

http://blog.csdn.net/jk198310/article/details/9264721  原文地址: Linux 内核的同步机制,第 1 部分 一. 引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问.尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问.在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作

把握linux内核设计(十):内核同步

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 如同linux应用一样,内核的共享资源也要防止并发,因为如果多个执行线程同时访问和操作数据有可能发生各个线程之间相互覆盖共享数据的情况. 在linux只是单一处理器的时候,只有在中断发生或内核请求重新调度执行另一个任务时,数据才可能会并发访问.但自从内核开始支持对称多处理器之后,内核代码可以同时运行在多个处理器上,如果此时不加保护,运行在多个处理器上的代码完全可能在同一时刻并