2011-07-20 85 views
1

我正在嘗試做緩衝區全模擬。當我的緩衝區滿了,我需要複製它進行進一步處理,複製是一個互斥的操作,但進一步處理不是。 我的操作流程就是這樣,我每次檢查緩衝區滿條件時,如果條件爲真,我要寫一些東西。我複製當前緩衝區&進程&然後編寫新的消息。有沒有辦法去QUEUE線程?

我有多個寫入線程&消息應該只按順序寫入。 我在短暫的職責是遵循

bwrite(data) 
{ 
    lock(m1); 
    //invoke copy thread 
    lock(m1); 
    // Do write message 
} 

copy(data) 
{ 
//copy the data 
unlock(m1); 
//Do further processing 
} 

的問題是,一旦複製完成後,消息被寫入以任意順序一樣,例如,如果thread01,& thread02有沒有&如果thread01拷貝第一,我不可以控制thread02可能在thread01寫入其最後一條消息之前開始複製的事實,因此可能會丟失消息。

它是一個很長的問題,基本上我需要一種方法將傳入的線程放入隊列中,以便我可以保證下一個執行順序。

回答

2

你爲什麼不只是有線程寫入共享隊列?然後你可以讓另一個線程一次一個地從隊列中取出元素並寫入它們 - 這保證了它們按照排隊的順序寫入。現在,您只需要將訪問權限同步到隊列中,以確保線程安全。

+0

實際上編寫的項目已經存在API並且在不同的地方多次調用它,遺憾的是我不允許對其進行更改。 你的方法看起來不錯,但由於我沒有任何控制寫入發生,我不能做太多的事情。 – vindyz

+0

嗯。但是你有線程控制權?我很困惑... –

+0

不幸的是只有我有控制權的複製線程,我可以調用一個複製線程即它,寫入可以發生在任何一個進程或線程的任何地方。 – vindyz

相關問題