信号量sem 的用法
Posted wainiwann
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号量sem 的用法相关的知识,希望对你有一定的参考价值。
#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 的用法的主要内容,如果未能解决你的问题,请参考以下文章
Linux C语言 信号量 sem_init() sem_wait() sem_timedwait() sem_post() sem_destroy()
Linux C语言 信号量 sem_init() sem_wait() sem_timedwait() sem_post() sem_destroy()