[問題] thread之間因速度不一致而漏data

看板C_and_CPP (C/C++)作者 (痴漢)時間12年前 (2014/04/05 18:25), 編輯推噓3(307)
留言10則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) window.h 問題(Question): 目前我程式的架構是這樣 thread1:收serial port data thread2:利用收到的data去做分析 thread1在收data方面不會漏data 但就是以收data的速度去改變它的output 這output是以global variable的方式傳入thread2 但我發現由於兩個thread跑的速度不一樣 會導致傳入thread2的data會漏掉 餵入的資料(Input): serial port data float 形式 預期的正確結果(Expected Output): thread之間溝通的data不會遺漏 錯誤結果(Wrong Output): thread1送data的速度比thread2收data的速度快 導致thread2會漏data 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 目前是有用waitforsingleobject()去做同步 但還是會漏data -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.109.250 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1396693540.A.6FA.html

04/05 19:34, , 1F
thread1收到data後放到que,thread2取出來之後pop掉?
04/05 19:34, 1F

04/05 20:18, , 2F
用queue是好解法
04/05 20:18, 2F

04/05 22:00, , 3F
FIFO Queue
04/05 22:00, 3F

04/06 01:40, , 4F
請問queue這種是像buffer一樣?會不會因塞滿而漏data?
04/06 01:40, 4F

04/06 10:09, , 5F
可設計 producer-consumer pattern 搭配 blocking queue
04/06 10:09, 5F

04/06 11:51, , 6F
queue要有size的最大限制, 塞data進queue時要檢查queue的size
04/06 11:51, 6F

04/06 11:53, , 7F
當遇到threshold時, 要有適當的處理方式, 例如thread1停止暫
04/06 11:53, 7F

04/06 11:54, , 8F
時停止收data, 或是移除掉queue的一些front data.
04/06 11:54, 8F

04/06 11:56, , 9F
前者是用在不想拋掉任何data, 後者是想讓thread2跟上最新狀態
04/06 11:56, 9F

04/10 15:52, , 10F
感謝 能用了
04/10 15:52, 10F
文章代碼(AID): #1JFzeaRw (C_and_CPP)
文章代碼(AID): #1JFzeaRw (C_and_CPP)