我有一个类文件。我创建了两个线程 A 和 B。在 A 和 B 中,每个线程,我创建一个自动变量File myfile
。然后 A 和 B 将操作它。那安全吗?会不会导致数据不一致?
问问题
947 次
3 回答
2
从纯内存资源的角度来看,它将取决于File
变量的范围:
如果它们是局部函数变量,那么你很高兴。每个执行线程都拥有自己的堆栈,与其他线程完全分开,它在其中创建局部变量。
如果它们是
static
,则您指的是相同的全局地址。
从文件访问的角度来看,这取决于它是否是同一个文件,以及您是否正在写入它。
于 2013-08-08T13:36:53.753 回答
1
不,这不应该是一个问题,仅仅是因为你的线程的每个实例都有它自己的变量实例。
检查变量的地址以确定,如果它们不同(如果我理解正确,它们会不同),你很好。
只有当两个线程同时访问同一个变量时,才会出现线程之间的不一致。不仅是“同名”,而且实际上是同一个变量。
现在,如果变量是全局变量并且两个线程都要访问它,则需要某种互斥来防止数据损坏,但自动变量是安全的。
于 2013-08-08T13:14:16.680 回答
1
这些变量彼此不同,因为每个线程都有自己的堆栈,并且变量的每个实例都将存在于该堆栈上。
但是,听起来您正在访问底层文件系统文件。如果它是同一个文件并且一个或两个线程正在写入该文件,那么这可能会导致数据一致性问题。您需要查阅操作系统的文档以查看其内容。如果两个线程都只是从同一个文件中读取,那么你会没事的。
于 2013-08-08T13:19:31.283 回答