多线程sem_init
来源:互联网 发布:淘宝体验中心 编辑:程序博客网 时间:2024/06/11 06:25
用下面一组函数(系统调用)来实现。
int sem_init(sem_t *sem,int pshared,unsigned int value);
int sem_destroy(sem_t *sem);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem);
int sem_getvalue(sem_t *sem);
int sem_destroy(sem_t *sem);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem);
int sem_getvalue(sem_t *sem);
具体要Include什么头文件,在你的系统上man sem_init吧。
这组函数是POSIX标准的无名信号量函数,另外还有具名信号亮,这个嘛,等下回再说。
第一个参数:信号量名
看一个例子,比如有两个线程都要往打印机上打东西,但是同一时刻只能打一个。
那么首先用sem_init初始化一个信号量,注意pshared表示允许几个进程共享该信号量,一般设0用于进程内的多线程共享,要看是否支持进程共享,请查看下你的系统的man手册。
第三个参数value表示可用的资源的数目,即信号灯的数目,咱们这儿只有1个打印机所以设成1。
然后线程调用sem_wait取获取这个信号灯,第一个线程一看,有1个,他就拿到了,然后可以继续后继操作,此时信号灯自动减1,变成0个。那么第二个线程调用sem_wait时就会阻塞在这儿了。
第一个线程完成打印后,调用sem_post释放信号灯,信号灯数目变成1,将会唤醒等待的第二个线程,然后第二个线程接着打印。
最后当所有任务完成后,主线程调用sem_destroy释放这个信号量。
2 0
- 多线程sem_init
- 多线程信号量 sem_init 系列函数
- sem_init
- sem_init
- sem_init
- 多线程使用信号量sem_init,sem_wait,sem_post
- 多线程使用信号量sem_init,sem_wait,sem_post
- linux 下多线程错误 undefined reference to `sem_init'
- 解决linux 下多线程错误 undefined reference to `sem_init'
- linux 下多线程错误 undefined reference to `sem_init'
- sem_init() 函数
- sem_init函数
- 信号量sem_init
- sem_init()函数
- sem_init sem_post sem_wait
- sem_init on OS X
- sem_init函数用法
- 信号量sem_init,sem_wait,sem_post
- XenServer 虚拟机备份脚本
- NGUI查找子节点下的所有组件并且循环遍历销毁
- Angularjs表单的使用
- Copy List with Random Pointer
- 【Cocos2dx-3.x】通信协议之HTTP通信协议篇
- 多线程sem_init
- android 图片浏览器 demo
- android 过USB-IF测试注意事项及修改
- 数据结构之二叉树练习
- 婴幼儿食谱二十个月孩子
- 面试中如何剔除“鱼目混珠”程序员(转)
- 花生壳tomcat搭建并发布到外网访问,类似映射软件对比
- android之service(二)
- android 修改USB显示名字