linux下信号量semaphore的应用
来源:互联网 发布:java base64 加密 url 编辑:程序博客网 时间:2024/05/21 07:55
http://www.yuanma.org/data/2006/0721/article_1195.htm
生产者线程用于往链表里添加节点,数个工作线程从链表取出节点并处理。对于一般的mutex_lock,mutex_unlock方式,如果这一段时间没有工作,那么工作线程将会不停的调用lock,unlock操作。而这样的操作毫无疑义。
在这里系统给我们提供了另外一种同步机制,信号灯,Semaphore。
信号灯其实就是一个计数器,也是一个整数。每一次调用wait操作将会使semaphore值减一,而如果semaphore值已经为0,则wait操作将会阻塞。每一次调用post操作将会使semaphore值加一。将这些操作用到上面的问题中。工作线程每一次调用wait操作,如果此时链表中没有节点,则工作线程将会阻塞,直到链表中有节点。生产者线程在每次往链表中添加节点后调用post操作,信号灯值会加一。这样阻塞的工作线程就会停止阻塞,继续往下执行。
信号灯的类型为sem_t。在声明后必须调用sem_init()。需要传递两个参数,第一个参数就是你之前声明的sem_t变量,第二个必须为0。当你不再需要信号灯时,你必须调用sem_destroy()来释放资源。
等待信号灯的操作为sem_wait()。投递一个信号的操作为sem_wait()。和互斥量一样,等待信号灯也有一个非阻塞的操作,sem_trywait()。该操作在没有信号灯的时候返回EAGAIN。
下面是一个结合了互斥量和信号灯的例子:
- linux下信号量semaphore的应用
- linux下信号量semaphore的应用
- linux下的信号量(semaphore)
- Linux下的信号灯semaphore的应用
- .Net下信号量(Semaphore)的一种实现
- Linux Driver信号量semaphore
- linux信号量semaphore
- Semaphore(信号量)的使用
- Semaphore信号量的使用
- Semaphore信号量的使用
- Semaphore信号量的总结
- Java的信号量Semaphore
- java线程中信号量Semaphore类的应用
- linux信号量机制(semaphore)
- Linux信号量semaphore编程实例
- linux信号量机制(semaphore)
- macOS下信号量semaphore部分函数失效的问题
- linux mutex互斥体和semaphore信号量的区别
- 帶ssl加密的FTP客戶端上傳代碼(C#)
- 为什么要用Struts2
- 关于“笑贫不笑娼”
- mtk中的一些函数作用
- 开机启动加载驱动过程中调用PostMessage函数出错
- linux下信号量semaphore的应用
- [DotNetBar](一)介绍-安装导入
- CAS单点登录(SSO)完整教程
- 程序员那些悲催的事儿
- Arm linux 内核移植及系统初始化过程分析
- 编写Java程序的三十个基本规则
- BPM开发平台在表单中启动其它流程的方法|工作流引擎|BPM|JBPM|流程管理
- webservice发布到IIS后process類无法調用本地exe程序的解决方法
- boj 1344 复杂数问题