线程信号量

线程信号量可以实现线程的互斥和线程的同步。

信号量的数据类型:sem_t

信号量本质上是一个非负整数计数器,是共享资源的数目(即共享资源还剩下几个,信号量的值大于或等于0时,线程才不阻塞)

 

信号量的创建和销毁:

  

 

参数:

  sem:信号量指针

  pshared:是否在进程之间共享;0为不共享,1为共享

  value:信号量的初始值;一般为0,线程再调用sem_wait()函数后信号量的值就为-1,将阻塞

 

信号量的加减操作:

  

 

调用sem_post()一次,信号量作加一操作;

调用sem_wait()一次,信号量作减一操作;

当某个线程调用sem_wait()函数后,如果信号量的值小于0,则这个线程将阻塞。只有其他线程调用sem_post()函数对信号量作加操作后,并且信号量的值大于或等于0时,阻塞的线程才能继续运行。

 

 

PV操作:

P操作----->减

V操作----->加

sem_post()    加1操作 ====== V(1)

sem_wait()    减1操作 ====== P(1)

实现互斥:

  

 

实现同步:

  

posted @ 2023-02-26 22:50  踏浪而来的人  阅读(110)  评论(0编辑  收藏  举报