[英]Boost multithreading and shared variables
首先,對於這個問題是否已經解決,我感到很抱歉,但是我的Google技能似乎使我感到失望。
基本上,我有一個可以隨時檢查所有傳入消息的功能。 還有一個全局變量應在其中存儲此消息。 (我將此函數放在線程中)
我想使用以下方法檢查傳入消息:
while (global_array[0] != '#') { } // all messages are padded with '#'
可悲的是,這似乎不起作用。
我嘗試使此“ global_array
” global_array
易失,但隨后將不會與我用於接收的TCP函數配合使用。
我真的只需要這個就可以工作。.請,任何幫助將不勝感激。
編輯:“似乎沒有用”->變量似乎沒有改變,因為我陷入了這個循環
在線程之間進行通信時,您需要某種形式的同步。 將變量設為volatile
並不表示該變量在不同線程之間使用。 這樣做是為了防止編譯器優化對該變量的訪問,但除非告知您,否則CPU不會從其緩存以外的任何位置開始讀取任何內存的內容。 也就是說,使用volatile
只會使您的代碼變慢(是的,我知道,在某些平台上,編譯器實現者選擇將volatile
與多線程基元掛鈎,但通常認為這是一個壞主意)。
出於描述的目的,您要使用條件變量來保護對共享數據的訪問:
global_array
並發訪問,並繼續等待條件變量,直到有數據為止。 我認為Boost具有封裝類似功能的類,並且我確定用於在不同線程之間進行通信的隊列的代碼已發布到Stackoverflow。 在Google上搜索“線程通信隊列”會產生大量鏈接,以從中獲得靈感。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.