zoukankan      html  css  js  c++  java
  • 信号量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

  • 相关阅读:
    Codeforces Round #419 (Div. 2)
    论蒟蒻的自我修养
    12 day 1
    Balanced Teams (USACO Jan Bronze 2014)
    一个奇怪的绘图程序
    BZOJ 1002 [ FJOI 2007 ]
    BZOJ 3540 realtime-update 解题
    准备做的题目
    代码风格与树形DP
    CH round #55 Streaming #6
  • 原文地址:https://www.cnblogs.com/wainiwann/p/5600300.html
Copyright © 2011-2022 走看看