C++
起首實現出產者,界說出產者的函數,接管到數據放入隊列之后,挪用notify_one函數來通知消費者處置

接實在現消費者函數,挪用函數wait期待接管旌旗燈號,若是接管到旌旗燈號,那么從隊列中掏出數據然后處置,這里需要注重的是掏出數據之后,可以提前解鎖,以便出產者可以或許盡快處置數據

最后別忘了在類的私有屬性中界說線程鎖、隊列以及前提變量

完當作上面的步調之后,接下來就看下若何利用。起首經由過程線程的體例啟動出產者,休眠一段時候后,再經由過程線程的體例啟動消費者

調試運行的成果如下所示,這個申明先啟動出產者再啟動消費者,消費者也可以或許當作功處置出產者出產的數據

先啟動消費者,休眠一段時候,再啟動出產者

從輸出成果信息看,消費者和出產者是瓜代處置的,而且消費者與出產者的處置是一一對應的

最后再總體看下出產消費者模式,這里需要注重的是消費者中挪用wait函數,需要添加匿名函數,匿名函數是判定隊列是否為空,若是不為空,才繼續往下處置數據,若是為空,那么繼續wait, ? 這樣做的原因是wait返回有可能不是因為接管到出產者發送的旌旗燈號

0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!