在主執行緒里創建了一個子執行緒1用來收發tcp資料(還有其他連接放在子執行緒2,3,4....),在子執行緒1中主要用來做不定時資料發送,同時又創建了子執行緒1-1用來讀取設備定時上報的資料。現在需要把1,2,3路執行緒讀到的定時上傳的資料進行綜合,再通過第4個執行緒發送給第4臺設備,怎么構建比較好?我現在把各個執行緒讀取到的資料都放在全域變數里了,然后再在執行緒4綜合資料并上傳,感覺不太好,加了鎖但是弄得不太好,經常報資料沖突,有沒有比較好的建議?
uj5u.com熱心網友回復:
鎖沒加好吧,你看看這個有用沒https://blog.csdn.net/suifengsanjin/article/details/104993163
uj5u.com熱心網友回復:
1. 對于簡單的資料型別,可以用atomic2. 有多少個共享資料就有多少個鎖,每個鎖只負責保護一個資料
3. 鎖的范圍盡可能小,嘗試在鎖里面把共享資料拷貝一份到local變數里
4. 鎖盡量不要嵌套
uj5u.com熱心網友回復:
如果只是讀取資料,可以不用鎖住,只需要在讀取完成后判斷一下是否讀取完整就行。uj5u.com熱心網友回復:
具體怎么做 有示例嗎
uj5u.com熱心網友回復:
網上很多資料啊,搜索一下互斥鎖、多綫程編程都能找到。uj5u.com熱心網友回復:
不同執行緒之間通信可以考慮用佇列。在執行緒4中設定快取buf,將1,2,3讀取的資料進行保存處理。避開用鎖。uj5u.com熱心網友回復:
Win下你可以用簡單的訊息傳遞 123讀到的資料都PostThreadMessage給4 這些資料會被自動串行化 放到一個訊息佇列中uj5u.com熱心網友回復:
請問有具體示例嗎
uj5u.com熱心網友回復:
懷疑用不用鎖的都上鎖吧。uj5u.com熱心網友回復:
這樣會導致速度慢很多啊。。。
我現在每個埠10ms重繪一次
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/12611.html
標籤:C語言
上一篇:muduo編譯失敗,求原因
下一篇:超級小白求大佬解答
