以下为看视频笔记..........
1.生产者消费者问题模型
生产者消费者问题是一个经典的、多线程同步问题。
有两个线程: 一个生产者线程和一个消费者线程。两个线程共享一个初始为空、固定大小为n的缓存区。.
生产者的工作是“生产”一段数据,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待,如此反复;
同时,只有缓冲区非空时,消费者才能从中取出数据,一次消费一段数据, 否则必须等待,如此反复。
问题的核心是:
1.1 要保证不让生产者在缓存还是满的时候仍然要向内写数据;
1.2 不让消费者试图从空的缓存中取出数据。
2. 生产者消费者问题本质
解决生产者消费者问题实际上是要解决线程间互斥关系问题(指的是共享资源)同步关系问题(线程的步调)
由于缓冲区是临界资源,它一个时刻只允许一个生产者放入消息,或者--个消费者从中取出消息,所以这里我们需要解决一个互斥访问的问题。
同时生产者和消费者又是一- 个相互协作的关系,只有生产者生产之后,消费者才能消费,所以我们还需要解决一个同步的问题。
二值信号量指的是value值为0或1,实现共享资源的互斥。首先把value值初始化为1, 生产者线程访问共享资源时,他先获取二值信号量的值,因为value初始化为1,生产者可以操作共享资源;当这时候消费者线程去获取共享资源时,