Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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_Parallel Processing_Fork_System Calls - Fatal编程技术网

C 不共享相同数据的并行进程

C 不共享相同数据的并行进程,c,parallel-processing,fork,system-calls,C,Parallel Processing,Fork,System Calls,我正在编写一个小C代码,其中有一个变量作为int指针。进程应该做的是减去该变量的值,直到它达到0。 问题是,即使程序打印的地址相同,每个进程似乎都有自己的变量副本。这是因为每个进程在内存中都有自己的空间吗 以下是输出: START Account address: 0x7ffee5820be0 Parent substracted 10. Account value: 90, address 0x7ffee5820be0 Parent substracted 10. Account value:

我正在编写一个小C代码,其中有一个变量作为int指针。进程应该做的是减去该变量的值,直到它达到0。 问题是,即使程序打印的地址相同,每个进程似乎都有自己的变量副本。这是因为每个进程在内存中都有自己的空间吗

以下是输出:

START
Account address: 0x7ffee5820be0
Parent substracted 10. Account value: 90, address 0x7ffee5820be0
Parent substracted 10. Account value: 80, address 0x7ffee5820be0
Parent substracted 10. Account value: 70, address 0x7ffee5820be0
Parent substracted 10. Account value: 60, address 0x7ffee5820be0
Parent substracted 10. Account value: 50, address 0x7ffee5820be0
Parent substracted 10. Account value: 40, address 0x7ffee5820be0
Parent substracted 10. Account value: 30, address 0x7ffee5820be0
Parent substracted 10. Account value: 20, address 0x7ffee5820be0
Parent substracted 10. Account value: 10, address 0x7ffee5820be0
Parent substracted 10. Account value: 0, address 0x7ffee5820be0
Child substracted 10. Account value: 90 , address 0x7ffee5820be0
Child substracted 10. Account value: 80 , address 0x7ffee5820be0
Child substracted 10. Account value: 70 , address 0x7ffee5820be0
Child substracted 10. Account value: 60 , address 0x7ffee5820be0
Child substracted 10. Account value: 50 , address 0x7ffee5820be0
Child substracted 10. Account value: 40 , address 0x7ffee5820be0
Child substracted 10. Account value: 30 , address 0x7ffee5820be0
Child substracted 10. Account value: 20 , address 0x7ffee5820be0
Child substracted 10. Account value: 10 , address 0x7ffee5820be0
Child substracted 10. Account value: 0 , address 0x7ffee5820be0

看看这篇文章,我认为它将解释为什么父级和子级的地址似乎相同,以及整个内存状态在父级和子级之间不共享的事实:


是的,你的假设是正确的

如果要共享内存空间,您有两个选项:

查看共享内存—POSIX共享内存或System V共享内存,或者 使用自动共享相同内存空间的线程(C11/C++11线程或pthreads,即POSIX线程),或 使用Redis,这是一种非常快速的内存数据结构服务器队列、列表、集合、散列、字符串/整数/浮点,然后您可以在世界各地的进程之间以原子方式彼此共享变量。
无论C++线程,因为C11,也有原生C线程。@ AFK谢谢,我希望在您的改进正确编辑。我使用pTrand,它的工作原理。非常感谢!杰出的祝你的项目好运。问题和答案是免费的,所以如果你被卡住了,请回来。