信号量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 的用法的主要内容,如果未能解决你的问题,请参考以下文章

sem_wait sem_post信号量操作进本函数

POSIX 信号量上限

Linux C语言 信号量 sem_init() sem_wait() sem_timedwait() sem_post() sem_destroy()

Linux C语言 信号量 sem_init() sem_wait() sem_timedwait() sem_post() sem_destroy()

linux 信号量问题 编译错误 好像不识别sem_t定义的变量

奇怪的 POSIX 信号量行为(卡在 Linux 上的 sem_wait 上)