gpt4 book ai didi

linux - 如何在 Linux 中使用共享库的同一进程的实例之间共享共享库 (.so) 中的全局变量?

转载 作者:IT王子 更新时间:2023-10-29 00:25:20 24 4
gpt4 key购买 nike

我有一个在执行应用程序之前预加载的共享库 (.so),我在应用程序使用的共享库中有一些全局数据结构。应用程序可以使用 fork() 创建其他进程,这些进程可以更新共享库中的全局数据结构。我想在所有流程中保持对这些全局数据结构的一致看法。有什么方法可以在 Linux 中实现吗?

我曾尝试使用 shm_* 调用和 mmap() 将共享库的全局数据映射到共享段,但它不起作用。

最佳答案

最清楚地说:你不能完全按照你的要求去做。 Linux 不支持共享由链接器布局的全局变量。该内存将位于不可共享的映射到交换空间中。

我可以提供的一般食谱是这样的:

  1. 定义一个布局数据的结构。没有指针!只是抵消。
  2. 第一个进程在/tmp 中创建一个文件,根据需要设置访问 rw。打开,使用 MAP_SHARED 进行 mmap。
  3. 后续进程也打开,mmap with MAP_SHARED。
  4. 每个人都使用该结构来查找他们引用、读取或写入的片段。
  5. 注意并发性!

如果你真的只关心 parent 和它的 fork child ,你可以使用匿名映射而不用担心文件,你可以将映射的位置存储在全局中(可以在 child 中读取) .

关于linux - 如何在 Linux 中使用共享库的同一进程的实例之间共享共享库 (.so) 中的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com