如何解决c++:多线程同步经典案例之生产者消费者问题

介绍

这篇文章主要介绍如何解决c++:多线程同步经典案例之生产者消费者问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>生产者消费者问题(英语:生产者消费者问题),也称<强>有限缓冲问题(英语:有界限的缓冲区问题),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。

要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样,也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。

本文用一个ItemRepository类表示产品仓库,其中包含一个数组和两个坐标表示的环形队列,一个std::互斥成员,用来保证每次只被一个线程读写操作(为了保证打印出来的消息是一行一行的,在它空闲的时候也借用的这个互斥量╮(╯▽╰)╭),两个std:: condition_variable表示队列不满和不空的状态,进而保证生产的时候不满,消耗的时候不空。

# pragma>以上是如何解决c++:多线程同步经典案例之生产者消费者问题的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

如何解决c++:多线程同步经典案例之生产者消费者问题