生產者消費者問題

生產者消費者問題  ， 也稱有限緩衝問題  ， 是一個多進程同步問題的經典案例 。 該問題描述了共享固定大小緩衝區的兩個進程 — — 即所謂的 “ 生產者 ” 和 “ 消費者 ” — — 在實際運行時會發生的問題 。 生產者的主要作用是生成一定量的數據放到緩衝區中 ， 然後重複此過程 。 與此同時 ， 消費者也在緩衝區消耗這些數據 。 該問題的關鍵就是要保證生產者不會在緩衝區滿時加入數據 ， 消費者也不會在緩衝區中空時消耗數據 。 要解決該問題 ， 就必須讓生產者在緩衝區滿時休眠 （ 要麼乾脆就放棄數據 ） ， 等到下次消費者消耗緩衝區中的數據的時候 ， 生產者才能被喚醒 ， 開始往緩衝區添加數據 。 同樣 ， 也可以讓消費者在緩衝區空時進入休眠 ， 等到生產者往緩衝區添加數據之後 ， 再喚醒消費者 。 通常採用進程間通信的方法解決該問題 ， 常用的方法有信號燈法等 。 如果解決方法不夠完善 ， 則容易出現死鎖的情況 。 出現死鎖時 ， 兩個線程都會陷入休眠 ， 等待對方喚醒自己 。 該問題也能被推廣到多個生產者和消費者的情形 。