我有一个共享库(.so),在执行应用程序之前,我会预加载它,并且在共享库中有一些全局数据结构,应用程序使用这些结构。应用程序可以创建其他进程,例如使用fork(),并且这些进程可以更新共享库中的全局数据结构。我希望在所有进程中保持这些全局数据结构的一致视图。在Linux中有没有任何方法可以实现这一点?
我已经尝试使用shm_*调用和mmap()将共享库的全局数据映射到共享段,但不起作用。
我已经尝试使用shm_*调用和mmap()将共享库的全局数据映射到共享段,但不起作用。
mmap()
创建映射(当共享库最初在父进程中加载时调用)。MAP_ANONYMOUS
和MAP_SHARED
标志传递给mmap
- 这意味着继承映射的子进程将具有与父进程(和其他子进程)共享的映射。然后,共享库应该将要共享的数据结构存储在该mmaped内存段中(就像从malloc
返回的内存一样)。显然,您可能需要某种形式的锁定。gcc
__constructor__
函数属性指示库的构造函数。最好的问候, 汤姆。