在操作系统中,我们有进程,进程会占用资源,有些资源是可以共享的,但有些资源是只允许一个占用,不能共享,只有当占用的线程用完释放后,下一个需要用的线程才可以申请使用,这样的资源便是临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。
消费者和生产者就金典的讲述了消费者与生产者共享“缓存区”的多线程同步问题。
基本描述:
同步关系
生产者负责生产产品,将产品放入仓库(“缓冲区”),然后消费者就从仓库里取件,然后消费。这里的仓库(“缓冲区”),就是是两者并发进行的条件。在生产和消费之间,必须满足同步,也就是不允许消费者从空库里取货,也不允许生产者向一个已经装满的仓库中放货,要想有序达成循环,就必须同步。
互斥关系
生产者和消费者,哪里存在互斥呢?
当然是二者对于缓冲区存在互斥问题,哪里来的互斥?你想想,生产者和消费者是同步运行的,肯定会遇到两者同时用缓存区的时候,如果同时用的话,那么产品数,和消费数就会不一致(例如,原来的产品数是num=1,现在缓冲区不但生产了(num+1=2),还取走了(num=1-0)这导致num变为0了,此时的变量二者用的都是num=1)这样就会导致结果出问题。对于这样的问题就必须对缓冲区进行互斥。
分析