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