1

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

4

3 回答 3

2

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

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

  • 如果它们是static,则您指的是相同的全局地址。

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

于 2013-08-08T13:36:53.753 回答
1

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

检查变量的地址以确定,如果它们不同(如果我理解正确,它们会不同),你很好。

只有当两个线程同时访问同一个变量时,才会出现线程之间的不一致。不仅是“同名”,而且实际上是同一个变量。

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

于 2013-08-08T13:14:16.680 回答
1

这些变量彼此不同,因为每个线程都有自己的堆栈,并且变量的每个实例都将存在于该堆栈上。

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

于 2013-08-08T13:19:31.283 回答