首页 > 其他 > 详细

同步互斥阻塞

时间:2020-04-14 12:42:00      阅读:60      评论:0      收藏:0      [点我收藏+]

1、原子操作

         指在执行过程中不会被别的代码路径所中断的操作

常用函数:

@atomic t v=ATOMIC_INIT(0);         //定义原子变量v,并初始化为0

@atomic_read(atomic_t *v);          //返回原子变量的值

@void atomic_inc(atomic_t *v);       //原子变量增加1

@void atomic_dec(atomic_t *v);       //原子变量减少1 

@int atomic_dec_and_test(atomic_t *v);//自减操作后测试其是否为0,0返回ture,否则返回false

 

2、信号量

         用于保护临界区的常用方法,只有得到信号量的进程才能执行临界区代码

当获取不到信号量时,进程进入休眠等待状态。

同时的两个程序,第一个是获取了信号量后,第二个进入程序会休眠。

只能等到第一个进程结束后才能开始进程

定义信号量:

@struct semaphore sem;

初始化信号量:

@void sema_init(struct semaphore *sem,int val);

  void init_MUTEX(struct semaphore *sem); //初始化为0

获得信号量:

@void down(struct semaphore *sem);

int down_interruptible(struct semaphore *sem);

int down_trylock(struct semaphore *sem);

释放信号量

@void up(struct semaphore *sem);

 

3、阻塞

         指在执行设备操作时若不能获得资源则挂起进程,直到满足条件后再进行操作。

         被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待条件被满足。

非阻塞操作

进程在不能进行设备操作时,并不挂起,它或者放弃,或者不停查询,直至可以进行操作为止。

fd = open(“…”,  O_RDWR | ONONELOCK);

同步互斥阻塞

原文:https://www.cnblogs.com/liuqing520/p/12696713.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!