linux并发控制(三)

十:读写信号量

防读不防写…“

  传说中:读写信号量可允许N个读执行单元同时访问共享资源,而最多只能有一个写执行单元。

使用方法:1)定义和初始化读写信号量

              struct rw_semphore my_rws;    //定义读写信号量

              void init_rwsem(struct rw_semaphore *sem);    //初始化读写信号量

              2)读信号量获取

              void down_read(struct rw_semaphore *sem);

              int down_read_try(struct rw_semaphore *sem);

              3)读信号量释放

              void up_read(struct rw_semaphore *sem);

              4)写信号量获取

              void down_write(struct rw_semaphore *sem);

              int down_write_try(struct rw_semaphore *sem);

              5)写信号量释放

              void up_write(struct rw_semaphore *sem);

给个例子吧:

rw_semaphore rw_sem;//定义读写信号量
init_rwsem(&rw_sem);//初始化读写信号量

//读时获取信号量
down_read(&rw_sem);
...//临界资源
up_read(&rw_sem);

//写时获取信号量
down_write(&rw_sem);
...//临界资源
up_write(&rw_sem);

 

十一:互斥体(啥叫互斥体,怎么感觉前边的都是互斥体,呵呵,确实,只不过Linux开发者们觉得不过瘾,就专门研究了一个互斥体,谁让咱用人家的东西呢)

使用方法:1)定义并初始化互斥体

              struct mutex my_mutex;

              mutex_init(&my_mutex);

             2)获取互斥体

              void fastcall mutex_lock(struct mutex *lock);//引起的睡眠不能被打断

              int fastcall mutex_lock_interruptible(struct mutex *lock);//可以被打断

              int fastcall mutex_lock_trylock(struct mutex *lock);//尝试获得,获取不到也不会导致进程休眠

             3)释放互斥体

              void fastcall mutex_unlock(struct mutex *lock);

给个例子:

struct mutex my_mutex;   //定义mutex

mutex_init(&my_mutex);

 

mutex_lock(&my_mutex);

….//临界资源

mutex_unlock(&my_mutex);

 ok并发控制结束。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值