c - 有没有办法在进程之间共享变量(在共享库中)?
问题描述
我想在共享库中初始化一个复杂变量,但只初始化一次。之后我想与所有使用这个库的进程共享现在初始化的变量。
例子
假设 lib 被调用
libgetx.so
并且它具有功能int get_variable_x()
- 它返回一个名为 的变量的值x
。init_x(5)
- 正在初始化x
我只想初始化
x
一次(可能在加载库时) - 想象一些昂贵的东西,比如解析配置文件。现在,每次我
get_variable_x()
从链接到共享库的进程中调用时,我都希望能够读取x
. 但是没有再次初始化它(因为它已经在另一个进程中)。
这可能吗?当您从不同进程的共享库中调用函数时,我不确定系统中到底发生了什么,但看起来它们不共享相同的空间。
实际情况:我在Linux上。我想解析一个 yaml 配置文件并通过共享库获取配置值,而不是一次又一次地解析配置文件。我正在使用 yaml-pp 和 yaml-cpp-path 来获取值。然后它会调用在 yaml 文件中定义的eg get_config("something.id
) id`。to get the
解决方案
如何执行此操作的具体答案是特定于平台的,但您想查看您的平台提供的任何共享内存设施。简而言之,您需要设置一个互斥锁或类似的东西,然后等待互斥锁解锁。
互斥锁解锁后,步骤的确切顺序取决于平台上共享内存的工作方式,但您需要创建/附加到内存段,确定是否有其他进程已经创建了该段,如果没有,则将共享数据写入其中。
完成所有这些后,释放互斥锁并继续您的快乐方式。
推荐阅读
- c - 服务器挂在 UDP 套接字的 recvfrom() 上(C,Windows)
- mediawiki - importImages.php 没有将所有文件移动到正确的子目录中
- javascript - 类型错误:fn.bind 不是函数。不和谐.js v13
- python - 分箱时如何包含 0 值
- c++ - c++: 找不到 numpy/arrayobject.h 和 Python.h
- javascript - 如何转换此对象数组中的对象?
- django - RetrieveAPIView Django Rest框架,当数据库中不存在lookup_field详细信息时返回自定义响应
- c++ - 使用类模板的派生类型作为模板模板参数
- firebase - FirebaseUser 不是现有的类 | 身份验证错误
- python - 文件在同一个文件夹中,但仍然得到 FileNotFoud