线程信号量
线程信号量可以实现线程的互斥和线程的同步。
信号量的数据类型: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)
实现互斥:
实现同步: