信号量sem 的用法
2016-06-20 13:42
274 查看
#include <semaphore.h>
sem_t sem;
sem_init(&sem, 0, 0);
sem_post(&sem);
sem_wait(&sem);
sem_destroy(&sem);
信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为:
extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));
sem为指向信号量结构的一个指针;
pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享;
value给出了信号量的初始值。
函数sem_post( sem_t *sem )用来增加信号量的值。
当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。
函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywait ( sem_t *sem )是函数sem_wait()的非阻塞版本,它直接将信号量sem的值减一。
函数sem_destroy(sem_t *sem)用来释放信号量sem。
---------------------------------------------------------------
见过的实例用在阻塞主线程上,等程序运行结束资源释放的时候 使用sem_post(sem); 来结束阻塞。
转:http://blog.sina.com.cn/s/blog_af9acfc6010191bj.html
sem_t sem;
sem_init(&sem, 0, 0);
sem_post(&sem);
sem_wait(&sem);
sem_destroy(&sem);
信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为:
extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));
sem为指向信号量结构的一个指针;
pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享;
value给出了信号量的初始值。
函数sem_post( sem_t *sem )用来增加信号量的值。
当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。
函数sem_wait( sem_t *sem )被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。函数sem_trywait ( sem_t *sem )是函数sem_wait()的非阻塞版本,它直接将信号量sem的值减一。
函数sem_destroy(sem_t *sem)用来释放信号量sem。
---------------------------------------------------------------
见过的实例用在阻塞主线程上,等程序运行结束资源释放的时候 使用sem_post(sem); 来结束阻塞。
转:http://blog.sina.com.cn/s/blog_af9acfc6010191bj.html
相关文章推荐
- 6/20 sprint3 看板和燃尽图的更新
- canvas模仿微信抢红包功能
- 2016长城信息杯中国大学生程序设计竞赛中南邀请赛 xtu 1250 Super Fast Fourier Transform
- EF Attach时已存在的处理方式
- Android中常用的五种数据存储方式
- SQL SERVER 的时间转换。
- Android富文本编辑器总结(一)
- 2016长城信息杯中国大学生程序设计竞赛中南邀请赛 xtu 1245 Hamiltonian Path
- C#开发和使用中的33个技巧
- Spring MVC POST中文乱码解决方案
- java弱引用
- 手机虚拟键盘的设置显示隐藏
- mac安装配置redis
- 独特性,就是你最好的竞争力
- mysql导出部分字段数据 及限定条件
- 仿百度一下即时搜索效果
- 2016长城信息杯中国大学生程序设计竞赛中南邀请赛 xtu 1244 Gambling
- awk中的循环和判断语句(转自何小波)
- 学习总结-Active Directory 域服务管理06-站点和复制
- HDU 3518 后缀数组