簡體   English   中英

促進多線程和共享變量

[英]Boost multithreading and shared variables

首先,對於這個問題是否已經解決,我感到很抱歉,但是我的Google技能似乎使我感到失望。

基本上,我有一個可以隨時檢查所有傳入消息的功能。 還有一個全局變量應在其中存儲此消息。 (我將此函數放在線程中)

我想使用以下方法檢查傳入消息:

while (global_array[0] != '#') { } // all messages are padded with '#'

可悲的是,這似乎不起作用。

我嘗試使此“ global_arrayglobal_array易失,但隨后將不會與我用於接收的TCP函數配合使用。

我真的只需要這個就可以工作。.請,任何幫助將不勝感激。

編輯:“似乎沒有用”->變量似乎沒有改變,因為我陷入了這個循環

在線程之間進行通信時,您需要某種形式的同步。 將變量設為volatile 並不表示該變量在不同線程之間使用。 這樣做是為了防止編譯器優化對該變量的訪問,但除非告知您,否則CPU不會從其緩存以外的任何位置開始讀取任何內存的內容。 也就是說,使用volatile只會使您的代碼變慢(是的,我知道,在某些平台上,編譯器實現者選擇將volatile與多線程基元掛鈎,但通常認為這是一個壞主意)。

出於描述的目的,您要使用條件變量來保護對共享數據的訪問:

  1. 讀取線程鎖定互斥鎖,以保護對global_array並發訪問,並繼續等待條件變量,直到有數據為止。
  2. 寫入線程鎖定互斥鎖,將數據放入其中,解鎖互斥鎖,並向條件變量發出信號。

我認為Boost具有封裝類似功能的類,並且我確定用於在不同線程之間進行通信的隊列的代碼已發布到Stackoverflow。 在Google上搜索“線程通信隊列”會產生大量鏈接,以從中獲得靈感。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM