2012-04-24 8 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

+4

'実際のコードではない'ということは、あなたが多くの '本当の助け'を得ることができないことを意味します。 –

+0

'コマンド'はどのように定義されていますか?代入後に 'cout'が実行されるのは確実ですか? – smocking

答えて

0

commandを複数のスレッド間で共有されている場合は、それへのすべての読み取り/書き込みアクセスを守るためにクリティカルセクション(またはものは何でも好きなあなたが好きなロック機構)が必要です。そうでなければ、coutはTHREAD1が同時にcommandに書き込んでいる可能性があるので、何も知らないハードドライブをフォーマットします。

+0

1つのスレッドだけが書き込みを行う場合には問題ではなく、他のものは –

+0

その1つの書き込みと他のものを読み取るだけで – Lefsler

+0

@demonofnightだから...あるスレッドが同じ 'command'インスタンスに書き込むことができますが、他のスレッドはそれから読み込みますか?その場合、各スレッドは、この同じオブジェクトへの同時アクセスを保護するために何かを行わなければなりません。 –

関連する問題