信号量

2020-12-02  本文已影响0人  StevenHD

线程中的信号量

  1. 初始化:调用sem_init()就可以创建成功,value=1相当于互斥锁,value > 1可以表示资源
  2. sem_wait():-1操作,如果信号量为0就会阻塞
    sem_trywait()则是非阻塞,出错了errno会设置为EAGAIN
  3. sem_post():释放,给信号量+1

需要3个信号量
A执行的时候让B和C都等待,如何等待呢?B和C线程初始化信号量为0,就会处在等待

除此之外,信号量可以当作资源的个数使用——


进程中的信号量

1.1 线程交替运行

三个线程A,B,C,还有对应的3个信号量,除了第一个初值是1以外,其他2个初值都是0。


图示代码1
图示代码2
图解,使用semphore进行排队
线程A, B, C交替执行

1.2 信号量作为资源个数的使用

消费者——生产者模型

上一篇下一篇

猜你喜欢

热点阅读