C静态变量和分叉过程

C静态变量和分叉过程,c,concurrency,process,static,global-variables,C,Concurrency,Process,Static,Global Variables,假设有一个静态变量全局初始化为零,并且有一个分叉的进程。现在假设在这个父进程中,静态变量被设置为值10。我注意到在子进程中,静态变量仍然是零。这种行为是合理的,因为我们没有在子进程中更改此变量的值 如何使子对象中的静态变量与父对象中的该变量的值相同?也就是说,静态变量的子副本也设置为值10 谢谢,如果您需要更多信息,请告诉我。简短的回答是,对于静态变量,您不能,因为分配静态的内存区域无法共享。相反,您可以创建一个共享内存区域来执行此操作。一种方法是使用MAP\u匿名和MAP\u共享。把它想象成m

假设有一个静态变量全局初始化为零,并且有一个分叉的进程。现在假设在这个父进程中,静态变量被设置为值10。我注意到在子进程中,静态变量仍然是零。这种行为是合理的,因为我们没有在子进程中更改此变量的值

如何使子对象中的静态变量与父对象中的该变量的值相同?也就是说,静态变量的子副本也设置为值10


谢谢,如果您需要更多信息,请告诉我。

简短的回答是,对于静态变量,您不能,因为分配静态的内存区域无法共享。相反,您可以创建一个共享内存区域来执行此操作。一种方法是使用
MAP\u匿名
MAP\u共享
。把它想象成
malloc()
,页面大小的单位除外。另一种方法是使用
shm\u open()

我认为
mmap(MAP\u ANON | MAP\u SHARED)
是您所需要的,但不确定它是否是最好的解决方案,是否可移植/工作
shmget
也是相关的。您需要使用System V IPC(
shmat()
等)或POSIX(
shm_open()
等)或
mmap()
将数据映射到共享内存中。父级创建并附加(或映射)共享内存,设置指向共享内存的指针;然后,子级和父级都可以访问共享内存。注意同步问题。注意,这不会共享全局变量本身;它将共享变量(可能是全局变量)指向的数据。如果孩子更改指向其他地方的指针,家长将看不到更改。但两者都可以更改共享内存。或者在分叉之前分配变量,或者使用IPC。如果我修改限制使其不是静态的,该怎么办?