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

Eri*_*dia 0 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: 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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 6

是的,你的假设是正确的.

如果要共享内存空间,可以使用以下几种方法:

  • 要么看共享内存 - "POSIX共享内存""系统V共享内存",要么
  • 使用线程 - C11/C++ 11线程或"pthreads"(即POSIX线程) - 它们自动共享相同的内存空间,或者
  • 使用Redis,这是一个非常快速的内存数据结构服务器(队列,列表,集合,散列,字符串/整数/浮点数),然后您可以在世界各地的进程之间共享变量(实际上是原子的).