【参考】韦东山 教学笔记

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则返回true,否则返回false。

2. 信号量
信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码。
当获取不到信号量时,进程进入休眠等待状态。

定义信号量
struct semaphore sem;
初始化信号量
void sema_init (struct semaphore *sem, int val);
void init_MUTEX(struct semaphore *sem);//初始化为0

static DECLARE_MUTEX(button_lock); //定义互斥锁

获得信号量
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 | O_NONBLOCK);

最新文章

  1. iOS 怎么设置 UITabBarController 的第n个item为第一响应者?
  2. UVALive 3644 X-Plosives
  3. (转)linux服务器安全配置攻略
  4. python表达式操作符【学习python必知必会】
  5. [算法]检测空间三角形相交算法(Devillers & Guigue算法)
  6. C#课外实践——校园二手平台(心得篇)
  7. 微信支付开发-Senparc.Weixin.MP详解
  8. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码
  9. c++随机数生成
  10. Linux服务器偶尔无法访问问题
  11. c#_错误处理_基础
  12. (转)JSON基础入门
  13. poj2096 Collecting Bugs(概率dp)
  14. [SOJ] DAG?
  15. APP IM 之 XMPP和Jabber及选择方案
  16. bootstrap(响应式)加减输入框
  17. 多项式A除以B
  18. 如何在mac下安装php
  19. Python获取下载速度并显示进度条
  20. LoadRunner之IP欺骗

热门文章

  1. 腾讯云&搭建微信小程序服务
  2. GlobalSign 多域型(SNAs) SSL 证书
  3. sqlserver 字符串函数
  4. PHP array_intersect_ukey()
  5. GPS-Graph Processing System 改动源代码经验总结 (四)
  6. javascript 获取当前对象
  7. discuz新的单点论坛(不依赖UCenter)
  8. postgresql数据库psql控制台操作命令
  9. Pointcut is not well-formed: expecting 'name pattern' at character position 36
  10. 使用命名方式使用django的url模式