2012-04-24 61 views
0

我創建了一個調用函數以更改變量值的線程,但是當它完成時,值不再被更改。線程更改變量值並查看其外部的更改

它只是一個例子,它不是真正的代碼。

THREAD1: 
if(size = socket.recv(data))deserializeData(data) 

deserializeData(){ 
//Deserialize the data (csv format) and then copy to command 
command = tmp; 
} 

Outside the thread 
cout << command 

線程內,deserializeData如果我把它正確地顯示了命令,但外面當我做COUT它顯示什麼。

我看到了易失性,但我試着用我的字符串變量,它不工作。

感謝

+0

是否有多個線程可以訪問該變量? – Erwald 2012-04-24 18:09:45

+4

'不是真正的代碼'意味着你將無法獲得太多'真正的幫助' – 2012-04-24 18:10:14

+0

定義了'command'的範圍和範圍?你確定'cout'在作業後被執行了嗎? – smocking 2012-04-24 18:12:20

回答

0

如果command被多個線程之間共享,那麼你需要一個CriticalSection的(或任何你喜歡最喜歡的鎖定機制)來保護它的所有讀/寫訪問。否則,cout可能會打印垃圾,根本沒有什麼,格式化您的硬盤,誰知道什麼,因爲THREAD1可能同時寫入command

+0

之外的代碼(GLOBAL VARIABLE)的開頭聲明瞭該命令如果一個線程只寫入,而其他只讀 – 2012-04-24 19:14:08

+0

它不是一個問題,一個寫入,另一個只是讀取 – Lefsler 2012-04-25 18:16:33

+0

@demonofnight所以......一個線程可以寫入同一個'command'實例,而另一個線程正在讀取它?如果是這樣,那麼每個線程必須做一些事情來保護對同一對象的併發訪問。 – 2012-04-26 01:30:10