秒殺多線程-生產(chǎn)者消費(fèi)者問(wèn)題
推薦閱讀:


生產(chǎn)者消費(fèi)者問(wèn)題是一個(gè)著名的線程同步問(wèn)題,該問(wèn)題描述如下:有一個(gè)生產(chǎn)者在生產(chǎn)產(chǎn)品,這些產(chǎn)品將提供給若干個(gè)消費(fèi)者去消費(fèi),為了使生產(chǎn)者和消費(fèi)者能并發(fā)執(zhí)行,在兩者之間設(shè)置一個(gè)具有多個(gè)緩沖區(qū)的緩沖池,生產(chǎn)者將它生產(chǎn)的產(chǎn)品放入一個(gè)緩沖區(qū)中,消費(fèi)者可以從緩沖區(qū)中取走產(chǎn)品進(jìn)行消費(fèi),顯然生產(chǎn)者和消費(fèi)者之間必須保持同步,即不允許消費(fèi)者到一個(gè)空的緩沖區(qū)中取產(chǎn)品,也不允許生產(chǎn)者向一個(gè)已經(jīng)放入產(chǎn)品的緩沖區(qū)中再次投放產(chǎn)品。
首先來(lái)簡(jiǎn)化問(wèn)題,先假設(shè)生產(chǎn)者和消費(fèi)者都只有一個(gè),且緩沖區(qū)也只有一個(gè)。這樣情況就簡(jiǎn)便多了。第一,從緩沖區(qū)取出產(chǎn)品和向緩沖區(qū)投放產(chǎn)品必須是互斥進(jìn)行的??梢杂藐P(guān)鍵段和互斥量來(lái)完成。第二,生產(chǎn)者要等待緩沖區(qū)為空,這樣才可以投放產(chǎn)品,消費(fèi)者要等待緩沖區(qū)不為空,這樣才可以取出產(chǎn)品進(jìn)行消費(fèi)。并且由于有二個(gè)等待過(guò)程,所以要用二個(gè)事件或信號(hào)量來(lái)控制。



然后再對(duì)這個(gè)簡(jiǎn)單生產(chǎn)者消費(fèi)者問(wèn)題加大難度。將消費(fèi)者改成2個(gè),緩沖池改成擁有4個(gè)緩沖區(qū)的大緩沖池。

有一個(gè)問(wèn)題就是產(chǎn)品8被消費(fèi)了兩次,這是不合理的??梢栽O(shè)置一個(gè)變量來(lái)解決這個(gè)問(wèn)題,自行思考。
參考:https://blog.csdn.net/morewindows/article/details/7577591