现在的位置: 首页 > 综合 > 正文

内核同步机制——信号量

2014年03月12日 ⁄ 综合 ⁄ 共 946字 ⁄ 字号 评论关闭

1.通用版

信号量用于对一个或多个资源进行互斥访问。基本操作如下:

void sema_init(struct semaphore *sem, int val);//信号量初始化函数

静态初始化:

DECLARE_MUTEX(name);//初始化为1

DECLARE_MUTEX_LOCKED(name);//初始化为0

动态初始化:

void init_MUTEX(struct semaphore *sem);

void init_MUTEX_LOCKED(struct semaphore *sem);

linux中,P函数称为downV函数称为up

void down(struct semaphore *sem);//不可中断版本

int down_interruptible(struct semaphore *sem);//可中断版本

int down_trylock(struct semaphore *sem);//不等待版本,立即返回,0表示成功。

一般情况下使用down_interruptible函数,它允许一个在信号量上等待的用户空间进程被用户打断。不过在使用该函数时必须记住要检查它的返回值,并做出相应的处理。该函数被中断时返回一个非零值。

void up(struct semaphore *sem); //释放占用的信号量

2.读写信号量

/写信号量rw_semaphore

说明:允许一个进程写,多个进程读

头文件:<linux/rwsem.h>

初始化函数:

void init_rwsem(struct rw_semaphore *sem);

相关操作:

void down_read(struct rw_semaphore *sem);

Int down_read_trylock(struct rw_semaphore *sem);//0表示成功

void up_read(struct rw_semaphore *sem);

void down_write(struct rw_semaphore *sem);

int down_write_trylock(struct rw_semaphore *sem);

void up_write(struct rw_semaphore *sem);

void downgrade_write(struct rw_semaphore *sem);

抱歉!评论已关闭.