tl; dr:我如何配置cJSON以在子进程中分配内存,以便父进程可以看到生成的结构?
我有一个请求,其中列出了要为其生成摘要并以 JSON 形式返回的多个产品。目前,我的代码是单线程的,并使用 cJSON 库来组合和编组 JSON。
由于摘要的计算成本很高(用户请求将某些计算作为摘要的一部分执行),我想fork(2)
为每个请求的产品,然后让它获取、处理和总结cJSON_Object
(从技术上讲cJSON*
,但“构造函数”是cJSON_CreateObject
) ,然后让父线程等待所有子线程返回他们的cJSON_Object
对象以连接在一起,执行一些后期处理,最后编组为一个字符串返回。由于后处理,我想返回父 acJSON_Object
而不是让子线程返回字符串。
现在,我看到cJSON.h:144 CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
which 接受cJSON.h:125 struct internal_hooks
允许您指定自定义malloc()
和free()
实现...如果我能找到分配共享内存的版本...并共享相同类型,那将是非常好的。我找到的最接近的是shmalloc
/shfree
但这来自OpenMPI库,对于看起来应该是简单的工作线程的东西来说似乎有点矫枉过正......
现在,这就是我卡住的地方,如何将 cJSON 结构图从子进程返回到父进程?
我附上了我认为最好的(尽管未经测试的)解决方案,作为不进一步混淆这个问题的答案。
PS - 最好该解决方案将自身限制为 POSIX API,但仅限 Linux 是可以接受的,并且作为最后的手段使用附加库。