1.什么是信号量?
信号量是线程同步的一种机制。
其引用的头文件是semaphore.h
定义的信号量格式为:sem_t sem;
涉及的函数有:
sem_init函数:初始化函数
sem_destory函数:销毁函数
sem_wait函数:检测自己的资源量,如果无资源则阻塞,,如果有资源,给自己的资源-1
sem_post函数:给对方的资源+1
sem_getValue函数:检测自身的资源数
2.信号量与条件变量的区别
条件变量更复杂,因为条件变量是否满足条件需要自己判断。但信号量是由信号量本身自己判断是否阻塞的,我们只需要更新资源数即可。
- 例子:
生产者、消费者模型。
生产者生产货品,放入仓库。消费者从仓库取商品。
下面定义了两个信号量,一个为semp,为生产者信号量。一个为semc,为消费者信号量。
下面二者初始化,生产者的初始最大资源数为1,表示仓库中只有一个位置可以放入货品。消费者的初始资源数为0,表示仓库中初始时无位置可以存放货品。
- 信号量+互斥量
上面虽然添加了信号量,但是会多个线程共同工作,这时候就会出现问题,需要互斥量。
但是互斥量加在哪里不会导致死锁呢?思考。