Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多线程环境中同名的变量_C++_Multithreading - Fatal编程技术网

C++ 多线程环境中同名的变量

C++ 多线程环境中同名的变量,c++,multithreading,C++,Multithreading,我有一个班级档案。我创建了两个线程A和B。在A和B中,每个线程都创建了一个自动可变的文件myfile。然后A和B会操作它。安全吗?它会导致数据不一致吗?不,这应该不是问题,因为线程的每个实例都有自己的变量实例 检查变量的地址以确保,如果它们不同(如果我理解正确的话,它们会不同),您就没事了 只有当两个线程同时访问同一个变量时,线程之间才会出现不一致。不仅仅是“同一个名字”,实际上是同一个变量 现在,如果变量是全局变量,并且两个线程都要访问它,则需要某种互斥来防止数据损坏,但自动变量是安全的。不,

我有一个班级档案。我创建了两个线程A和B。在A和B中,每个线程都创建了一个自动可变的
文件myfile
。然后A和B会操作它。安全吗?它会导致数据不一致吗?

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

检查变量的地址以确保,如果它们不同(如果我理解正确的话,它们会不同),您就没事了

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


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

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

检查变量的地址以确保,如果它们不同(如果我理解正确的话,它们会不同),您就没事了

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


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

由于每个线程都有自己的堆栈,因此变量的每个实例都将活在该堆栈上,因此变量将彼此区分开来


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

变量将彼此区分,因为每个线程都有自己的堆栈,并且变量的每个实例都将位于该堆栈上


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

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

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

  • 如果它们是静态的
,则您指的是同一全局地址


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

从纯内存资源的角度来看,这将取决于您的
文件的范围
变量:

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

  • 如果它们是静态的,则您指的是同一全局地址



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

您可以发布一些代码吗?它是同一个文件吗?文件以何种模式(读/写)打开?@HAL
file
是类名,不一定与操作系统上的同一文件相关。至少我是这么想的。@ATaylor是的,我只是想了解更多细节。使用
文件
意味着你可能正在进行文件输入/输出?从两个线程写入同一文件可能会有问题。更多信息:你能发布一些代码吗?是同一个文件吗?文件以何种模式(读/写)打开?@HAL
file
是类名,不一定与操作系统上的同一文件相关。至少我是这么想的。@ATaylor是的,我只是想了解更多细节。使用
文件
意味着你可能正在进行文件输入/输出?从两个线程写入同一文件可能会有问题。更多信息:也就是说,线程A中的
myfile
不知道线程B中存在
myfile
,并且它没有机会在另一个线程中更改相同的名称变量,对吗?@ccsnailpp是的,这是局部(自动)变量的特征。它的范围仅限于定义它的函数/类的实例。无论其他人是谁,即使它是同一个函数/类的另一个实例,它也永远无法访问同级的变量,除非您定义了一个getter,而您没有定义它。也就是说,线程a中的
myfile
不知道线程B中存在
myfile
,它没有机会在另一个线程中更改相同名称的变量,对吗?@ccsnailpp是的,这是局部(自动)变量的特征。它的范围仅限于定义它的函数/类的实例。不管其他人是谁,即使它是同一个函数/类的另一个实例,它也永远无法访问同级的变量,除非你定义了一个getter,而你没有。一个小问题:这听起来像是一个经典的竞争条件,不是吗?通常,一旦打开一个文件,应用程序就会获得一个“锁”,这意味着用不同的进程/线程再次打开同一个文件会失败,不是吗?@ATaylor-这取决于具体情况。两个线程/进程当然有可能打开同一个文件进行读取?通常,一旦打开一个文件,应用程序就会获得一个“锁”,这意味着