线程-信号量

来源:互联网 发布:淘宝店铺如何设置会员 编辑:程序博客网 时间:2024/06/08 16:48

信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。当公共资源增加时,调用函数sem_post()增加信号量。只有当信号量值大于0时,才能使用公共资源,使用后,函数sem_wait()减少信号量。函数sem_trywait()和函数pthread_ mutex_trylock()起同样的作用,它是函数sem_wait()的非阻塞版本。

 

/usr/include/semaphore.h

 

sem_t:信号量数据结构

int sem_init ((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的值减一。

 

 

int size=0;

int count = 0;

sem_t sem;

void main(){/*主线程读操作*/

      sem_init(&sem, size,0);

      while(1){

               sem_wait(&sem);

                                    read(count);

               size--;

      }

}

void wirter(){

      wirte(count);

      size++

      sem_post(&sem);

}

 

原创粉丝点击