我有一個生產者和消費者。生產者在給定的共享內存區域中寫入固定大小的項目,並且消費者檢索它們。同步生產者和消費者與循環緩衝
隨機生產者可能會比消費者明顯更慢或更快。
我們想要的是
如果生產運行非消費者,當它填補了循環緩衝器,它保持高於消費者在消費一個寫上歷史最悠久的幀(其它快當然 - 我強調這一點,生產者和消費者必須在解決方案中同步,因爲它們是不相關的進程)。
如果消費者比生產者更快,它必須等待一個新的框架並在它出現時消耗它。
我發現生產者/不尊重的第一個請求(即,如果循環緩衝區已滿,他們在等待消費者來完成實現消費者循環緩衝器,但唯一的,而我想要覆蓋最舊的幀)。
我不想推出我自己的(容易出錯)解決方案,但使用預先封裝,測試過的解決方案。有人能指點我一個很好的C實現嗎? (C++也可以)。
非常感謝。
聽起來就像你只是想刪除某人必須編碼到你看到的實現中的限制。如果你只是刪除任何阻止生產者的代碼覆蓋緩衝區中的數據,我會認爲它會像你想要的那樣工作。 – 2009-10-14 17:09:04
@Carl - 以及讓頭部覆蓋尾部,您還需要提前尾部指針,否則您所做的只是清空整個緩衝區。 – ChrisW 2009-10-14 17:20:14
@Carl - 不,只是允許生產者覆蓋舊的緩衝區,刪除信號量將意味着覆蓋消費者消費的項目。我需要的是一個同步的生產者消費者實現。 – janesconference 2009-10-14 18:22:36