【问题标题】:Can a child process change a static variable shared by his parent?子进程可以更改其父进程共享的静态变量吗?
【发布时间】:2015-03-28 16:41:04
【问题描述】:

子进程可以更改其父进程共享的静态 int 吗?类似于这个简单的例子:

static int changeMe = 1;
...
int main() {
   if (fork()=0){
      changeMe = 0;
   }
   wait(0);
   printf(1, "changeMe value is: %d., changeMe);
}

我知道孩子创建了父记忆的克隆。但我实际上希望孩子会改变其父母的价值观 - 有可能吗?

【问题讨论】:

  • IPC,没那么简单。
  • 一句话,没有。如果你想做类似的事情,你可以使用共享内存。
  • fork() 开始一个新进程。该过程获取父数据的副本。所以子进程无权访问父数据。
  • 没有。如果您想这样做,您需要显式分配共享内存使用同步原语,以确保一个进程看到另一个进程所做的更改。
  • 关于提供的代码。行后:'changeMe = 0;需要有一个 exit() 语句。否则子进程将继续执行代码(父进程正在执行相同的代码),结果可能会令人困惑。孩子将永远挂在等待(0);陈述。父母也一样,因为孩子永远不会退出

标签: c fork parent-child child-process


【解决方案1】:

不是通过 fork,因为您正在创建一个具有单独堆栈和地址空间的新进程。如果要共享变量,请查看使用线程。

【讨论】:

  • 线程不是唯一的解决方案,但是的,它们是一个解决方案。
【解决方案2】:

fork() 后处理此类通信的最常用方法是使用管道,特别是如果您想要“与孩子的私人通信通道”。

http://www.gnu.org/software/libc/manual/html_node/Pipes-and-FIFOs.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多