2013-11-22 172 views
0

我遇到以下問題
我有幾個線程(生產者)計算移動對象的位置和一個打印計算結果的線程(消費者)。每個線程都有自己的時間尺度。同步的問題是消費者只有在所有生產者計算打印時的位置時才能打印結果。換句話說,消費者必須將其當前時間與生產者的相同時間進行比較,並決定是否可以打印結果。我發現了一個類似的例子,其中同步信號量,但那裏只有一個生產者。有誰知道一個聰明的解決方案?多線程:多個生產者+一個消費者

回答

0

消費者循環:

  • 等待n
  • 收集數據
  • 做它的事
  • 信號都n生產者

生產者循環(並行n):

  • 做它的事
  • 使
  • 等待

可用

  • 信號對消費者數據(對不起,不知道什麼QT,所以只是一般的算法)

    編輯:如果生產者有一個緩衝區,而不是等待同步,那麼你可以這樣做:

    C onsumer循環:

    • 等待,然後檢查所有緩衝區;在任何緩衝區爲空時重複
    • 收集數據;如果任何緩衝區已滿,信號到生產者
    • 做它的事

    生產者循環(n並行):

    • 做它的事
    • 等待如果緩衝區已滿
    • 排隊數據
    • 給消費者的信號
  • +0

    說「等待n次」是什麼意思?我必須鎖定** n **互斥鎖嗎?如果我理解你正確的話,生產者必須等待所有的數據將被處理,然後生成一個新的數據。我不認爲這是最好的解決方案。 –

    +0

    對不起,我想你只有在每個人都完成後纔會跟製片人一起進行。我的意思是在循環中鎖定相同的互斥量'n'次。如果你能緩衝結果,你可以用另一種方式更有效率。 – Amadan

    相關問題