线程同步---信号量

会有一股神秘感。 提交于 2019-12-05 22:57:31

信号量:

  多线程环境下使用的同步设施,相当于是互斥锁的升级版本。互斥锁类似一个二元的信号量,确保一个线程能够独占一块资源,

信号量则通过一个计数器来控制线程对于共享资源的访问,当计数器的值大于0的时候线程可以访问共享资源,并且使得计数器的值

减1,当计数值变为0时,所有试图通过信号量的线程均会阻塞,直到计数器的值大于0。

  信号量的函数:

  int sem_init(sem_t*sem,int pshared,unsigned int value),该函数用于初始化一个信号量,第二个参数为0表示该信号量为当前

进程的局部信号量,否则该信号量在多个进程之间共享。

  int sem_destory(sem_t* sem),用于销毁一个信号量。

  int sem_wait(sem_t* sem),以原子操作的方式将信号量的值减1,如果信号量的值为0,则该操作将被阻塞到信号量具有非0的值。

  int sem_trywait(sem_t* sem),相当图try_wait的非阻塞版本,当信号为0时该函数为-1,并设置errno为-1.

  sem_post(sem_t* sem),以原子操作的方式将信号量的值加1,阻塞与sem_wait()的线程将会被唤醒。

  以上的所有函数执行成功的返回值均为0,失败的返回值为-1,并且设置errno。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!