#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); 来结束阻塞。
标签:__,函数,阻塞,用法,信号量,线程,sem From: https://www.cnblogs.com/kn-zheng/p/17005011.html