多线程环境中具有相同名称的变量

时间:2013-08-08 13:11:57

标签: c++ multithreading

我有一个类文件。我创建了两个线程A和B.在A和B中,每个线程,我创建一个自动变量File myfile。然后A和B将操作它。这样安全吗?它会导致数据不一致吗?

3 个答案:

答案 0 :(得分:2)

从纯内存资源的角度来看,它将取决于File变量的范围:

  • 如果它们是局部函数变量,那么你很高兴。每个执行线程都拥有自己的堆栈,完全独立于其他线程,在那里创建局部变量。

  • 如果它们是static,则表示相同的全球地址。

从文件访问的角度来看,它取决于它是否是同一个文件,以及是否写入它。

答案 1 :(得分:1)

不,这应该不是问题,只是因为你的线程的每个实例都拥有它自己的变量实例。

检查变量的地址是否确定,如果它们不同(如果我理解正确的那样),你没事。

如果两个线程同时访问同一个变量,则只会发生线程之间的不一致。不只是“同名”,而是真正相同的变量。

现在,如果变量是全局的并且两个线程都要访问它,那么您需要某种互斥以防止数据损坏,但自动变量是安全的。

答案 2 :(得分:1)

变量将彼此分开,因为每个线程都有自己的堆栈,变量的每个实例都将存在于该堆栈中。

然而,这听起来像是在访问底层文件系统文件。如果它是同一个文件并且其中一个或两个线程正在写入文件,那么这可能会导致数据一致性问题。您需要查阅操作系统的文档以查看其内容。如果两个线程只是从同一个文件读取,那么你会没事的。