Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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_Process_Static_Mutex_Private - Fatal编程技术网

C:进程的私有变量

C:进程的私有变量,c,process,static,mutex,private,C,Process,Static,Mutex,Private,创建了两个进程 它们每个调用函数A,输入0(函数A在其他一些.c文件中) 变量x需要是全局的,但是,对于每个进程,它应该是私有的 由于它是x=y,似乎每个进程都有自己的x。我想知道为什么?为什么z在两个进程之间共享 int x; int z; void A(int y) { x = y; x++; z++; B(); } void B() { x--; } 总而言之 //2 process created and each of them ca

创建了两个进程

它们每个调用函数
A
,输入0(函数A在其他一些.c文件中)

变量x需要是全局的,但是,对于每个进程,它应该是私有的

由于它是
x=y
,似乎每个进程都有自己的x。我想知道为什么?为什么z在两个进程之间共享

int x;
int z;
void A(int y)
{
     x = y;
     x++;
     z++;
     B();
}
void B()
{
     x--;
}
总而言之

//2 process created and each of them call A(0)

任何健全的操作系统都会完全分离进程,因此一个进程在默认情况下无法访问其他进程的内存。如果您需要更多的澄清,请立即询问


澄清一下-全局变量是不共享的。

任何sane操作系统都完全分离进程,因此默认情况下一个进程无法访问其他进程的内存。如果您需要更多的澄清,请立即询问


澄清-全局变量不共享。

您混淆了进程和可执行文件

每个进程都是一个不同的实体,可以将二进制可执行指令和来自一个或多个文件的数据映射到其内存中

即使是同一可执行文件的两个实例(进程)也将拥有所有变量的各自副本。i、 e.变量不共享


进程之间的通信和共享数据是通过各种IPC机制实现的,如本

中所述。您可能会混淆进程和可执行文件

每个进程都是一个不同的实体,可以将二进制可执行指令和来自一个或多个文件的数据映射到其内存中

即使是同一可执行文件的两个实例(进程)也将拥有所有变量的各自副本。i、 e.变量不共享


进程之间的通信和共享数据是通过各种IPC机制实现的,如本

中针对每个进程所述。它们有自己的堆栈内存。存储在数据段中的静态值。当然属于进程私有。

对于每个进程。它们有自己的堆栈内存。存储在数据段中的静态值。当然属于进程私有。

每当产生一个进程时,它都会获得自己的地址空间。地址空间包括数据段、堆栈段、堆/bss和代码段。 在您的程序中,变量x是全局变量,因此它在该进程的数据段中被分配内存

2个或100个进程在其数据段中将有自己的x副本。这是任何操作系统为正在运行的进程分配内存的方式


如果需要在进程之间共享变量“x”,则至少需要使用共享内存

每当产生进程时,它都会获得自己的地址空间。地址空间包括数据段、堆栈段、堆/bss和代码段。 在您的程序中,变量x是全局变量,因此它在该进程的数据段中被分配内存

2个或100个进程在其数据段中将有自己的x副本。这是任何操作系统为正在运行的进程分配内存的方式


如果需要在进程之间共享变量“x”,则至少需要使用共享内存

如果在main中创建了两个线程,并调用了方法A(),则可能会发生以下情况

  • 两个线程对()方法的执行顺序未定义(任何线程都可以先启动)

  • 例如,假设thread1在X++之前执行()方法,而thread2开始执行()方法,则thread2将X值视为1而不是零(因为它是一个全局变量)

  • 如果存在任何全局变量(本例中为x,z),则两个线程共享相同的全局值


  • 如果在main中创建了两个线程,并调用了方法A(),则可能会发生以下情况

  • 两个线程对()方法的执行顺序未定义(任何线程都可以先启动)

  • 例如,假设thread1在X++之前执行()方法,而thread2开始执行()方法,则thread2将X值视为1而不是零(因为它是一个全局变量)

  • 如果存在任何全局变量(本例中为x,z),则两个线程共享相同的全局值


  • 谢谢,但是如果存在全局变量,那么它将被共享。为什么?谢谢,但是如果存在全局变量,那么它将被共享。为什么?您在main中创建了两个线程?2进程,在main中是的。您在main中创建了两个线程吗?2进程,在main中是的