1、读者写者
写者:写数据
读者:仅仅是读数据,不存在取走数据
写者与写者关系:互斥
读者与读者关系:没有关系
写者与读者关系:同步、互斥
解决方法:
1)读者优先:读者正在读,写者不能终止读者,直到读者读完,写者才能写入
2)写者优先:写者正在写,读者不能终止写者,直到写者写完,读者才能写入
2、生产者消费者
生产者:产生数据
消费者:取走数据
生产者与生产者:互斥关系
消费者与消费者:互斥关系
生产者与消费者:互斥、同步关系
生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。
要解决该问题,就必须让生产者在缓冲区满时休眠,等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样, 也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。
3、区别
1)数据一直都存在,不存在有空位才能写,有数据才能读的问题,写者写可以覆盖之前的值,读者不会消费数据,数据不会消失。
2)允许多个读者同时并发访问,而消费者却要互斥,写者不仅要和写者之间互斥,还要与读者也互斥,对于生产者/消费者只需与自身互斥。
时间: 2024-10-13 07:22:11