1. 翻翻书看下,linux提供两种信号量,内核信号量,由内核控制路径使用,System V IPC信号量,由用户态进程使用。下面的就是内核部分的信号量。内核信号量类似于自旋锁,当锁关闭着时,不允许内核控制路径继续进行,当某个进程试图获取已经被占用的资源时,这个进程被挂起,进入睡眠,因此只有可以睡眠的函数才能在函数内部获取信号量。

2. 看下内核信号量的结构体

struct semaphore {
spinlock_t lock;
unsigned int count;
struct list_head wait_list;
};

3. 函数的实现

void up(struct semaphore *sem)
{
unsigned long flags;
spin_lock_irqsave(&sem->lock, flags);
if (likely(list_empty(&sem->wait_list)))
sem->count++;
else
__up(sem);
spin_unlock_irqrestore(&sem->lock, flags);
}

最新文章

  1. 高性能网络编程(一)----accept建立连接
  2. Simultaneous Tag Editing in IntelliJ IDEA 14.1
  3. Codeforces 424C(异或)
  4. Cocoa Touch的3种类的交流方式delegate/target/notification
  5. iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)
  6. Light OJ 1136
  7. 工厂方法模式(Method Factory),理解多态应用的好例子.
  8. 自动化测试框架【linux版】:JMeter + Ant + Jenkins
  9. Redis数据结构之HperLogLog
  10. JQuery 数组获取和删除元素
  11. 远程过程调用概述-RMI简介
  12. 版本控制系统-SVN(1)
  13. python中用修饰器进行异常日志记录
  14. 小程序之根据参数更改title
  15. python---django中orm的使用(1)
  16. 我们为何放弃Eclipse,投奔IntelliJ IDEA
  17. codeforces水题100道 第十题 Codeforces Round #277 (Div. 2) A. Calculating Function (math)
  18. OpenCV-bwLabel-实现图像连通组件标记与分析
  19. 什么是websoket
  20. C柔性数组

热门文章

  1. OC 枚举
  2. C++中临时对象的产生与优化
  3. Ajax系列之三:UpdatePanel
  4. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
  5. Docker 安装tomcat7
  6. 创建properties文件保存在WEB项目的classes文件下
  7. Hive中使用LZO
  8. NDK下载地址
  9. JavaScript的原型(prototype、__proto__、constructor)
  10. JavaScript 基础(四) 循环