内核同步机制——信号量

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);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值