2013-01-21 146 views
0

我已經實現了一個緩衝區。該緩衝區有兩個屬性讀取和寫入。 read函數調用等待read_slot信號量可用。 write函數調用在write_slot上等待。 write_slot信號量安裝到初始計數100和最大計數100,而讀取插槽初始化爲初始計數0和最大計數100.信號量等待事件觸發窗口形式

因此,我觸發事件寫入緩衝區 - >減少寫入槽 - 增加讀取插槽。這個事件有時候會很快被解僱。 讀操作減少read_slot並增加write_slot。 因此,這種體系結構不能面對死鎖 - >因爲只有當read_slot爲0並且write_slot爲0時纔會發生死鎖......這是不可能的,因爲在普通互斥鎖內增加和減少了插槽。

我仍然面臨着僵局。有沒有人有關於事件觸發系統的功能的任何想法。

+1

爲什麼不張貼一些代碼,讓人們可以看看並提供建議? –

回答

0
The event is fired very fast sometimes. 

爲什麼不使用Producer Consumer模式。 很明顯,您無法無寫入地讀取(寫入操作之後應執行讀取操作)。 您可以通過BlockingCollections輕鬆實現.Net。

+0

對不起提及....我在'C'中使用IPC生產者消費者,我也用信號來喚醒讀/寫過程。最有可能是導致一些異步行爲。我現在已經從閱讀器和編寫器中刪除了睡眠,並且他們正忙着等待無限循環.....其工作...但是我需要睡眠的生產者消費者...不能實現用於IPC同步的內核信號因爲他們有其自身的侷限性。 –

+0

你在C或C#中實現IPC嗎?你打算用C#做什麼?如果C#,我們有睡眠/等待生產者消費者(不是無限循環)。或者更好地放一些代碼(你的要求不明確) –