UNIX(多线程):20---生产者消费者实例
本文將綜合運用 C++11 中的新的基礎設施(主要是多線程、鎖、條件變量)來闡述一個經(jīng)典問題——生產(chǎn)者消費者模型,并給出完整的解決方案。
生產(chǎn)者消費者問題是多線程并發(fā)中一個非常經(jīng)典的問題,相信學過操作系統(tǒng)課程的同學都清楚這個問題的根源。本文將就四種情況分析并介紹生產(chǎn)者和消費者問題,它們分別是:單生產(chǎn)者-單消費者模型,單生產(chǎn)者-多消費者模型,多生產(chǎn)者-單消費者模型,多生產(chǎn)者-多消費者模型,我會給出四種情況下的 C++11 并發(fā)解決方案,如果文中出現(xiàn)了錯誤或者你對代碼有異議,歡迎交流 ;-)。
單生產(chǎn)者-單消費者模型
顧名思義,單生產(chǎn)者-單消費者模型中只有一個生產(chǎn)者和一個消費者,生產(chǎn)者不停地往產(chǎn)品庫中放入產(chǎn)品,消費者則從產(chǎn)品庫中取走產(chǎn)品,產(chǎn)品庫容積有限制,只能容納一定數(shù)目的產(chǎn)品,如果生產(chǎn)者生產(chǎn)產(chǎn)品的速度過快,則需要等待消費者取走產(chǎn)品之后,產(chǎn)品庫不為空才能繼續(xù)往產(chǎn)品庫中放置新的產(chǎn)品,相反,如果消費者取走產(chǎn)品的速度過快,則可能面臨產(chǎn)品庫中沒有產(chǎn)品可使用的情況,此時需要等待生產(chǎn)者放入一個產(chǎn)品后,消費者才能繼續(xù)工作。C++11實現(xiàn)單生產(chǎn)者單消費者模型的代碼如下:
#include <unistd.h> #include <cstdlib> #include <condition_variable> #include <iostream> #include <mutex> #include <thread>static const int kItemRepositorySize = 10總結
以上是生活随笔為你收集整理的UNIX(多线程):20---生产者消费者实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统(5)-深度推荐模型-AutoR
- 下一篇: 网络游戏服务器架构