我正在开发一个涉及多个进程(子进程和父进程)的C应用程序,我正在try 使用共享内存和信号量在它们之间共享统计数据.然而,我的代码遇到了一个问题,子进程似乎没有正确地修改父进程中的共享统计信息,这阻碍了我准确地打印它们.

在Main中,我创建并附加了共享内存:

stats_shm_id = create_shared_memory(SHM_STATS_KEY, sizeof(Statistics));
stats = (Statistics *)attach_shared_memory(stats_shm_id);

Init函数执行以下操作:

stats = (Statistics *)malloc(sizeof(Statistics));
stats->shared_data_1 = 0;
stats->shared_data_2 = 0;

打印功能执行以下操作:

printf("%d",stats->shared_data1);
printf("%d",stats->shared_data2);

我的目标是让子进程修改父进程中的共享统计信息,以便能够准确地打印它们.然而,当我调用print_Statistics()函数时,子进程所做的更改似乎没有反映在父进程中.我已经验证了信号量是否被正确使用来同步对统计数据的访问.

有没有人能帮我弄清楚可能出了什么问题?这会不会是同步问题?我应该考虑采取哪些步骤来排除和解决此问题?

提前感谢您的任何帮助和建议!

推荐答案

有没有人能帮我弄清楚可能出了什么问题?

您的initialize_statistics()函数将全局stats变量设置为指向(非共享的)动态分配内存.这阻碍了之前设置和连接到共享内存段的工作.事实上,这些进程根本没有使用共享内存.

C++相关问答推荐

为指针 struct 创建宏

如何判断宏参数是否为C语言中的整型文字

C/SDL程序,渲染不使用我的渲染器

ZED for SDL上的C语言服务器

如何在IF语句中正确使用0.0

进程已完成,退出代码为138 Clion

这个C程序在工作中途停止获取输入.我收到分段故障(核心转储).我还是不知道问题出在哪里

C代码可以在在线编译器上运行,但不能在Leetcode上运行

为什么这个分配做得不好呢?

`预期说明符-限定符-列表在‘(三元运算符中的’token`‘之前

在下面的C程序中,.Ap0是如何解释的?

将size_t分配给off_t会产生符号转换错误

不兼容的整数到指针转换传递';char';到类型';常量字符*

分支预测和UB(未定义的行为)

令人困惑的返回和 scanf 问题相关

函数指针作为函数参数 - 应该使用 const 吗?

为什么程序在打印每个数字之前要等待所有输入?

如何正确探测平台设备?

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?

int 与 size_t 与 long