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