【发布时间】:2013-01-28 13:19:57
【问题描述】:
如果共享库 (.so) 被多个进程使用,是否可以将位于共享库 (.so) 中的全局变量用作单例?
例如初始值为 0,进程 1 递增 var 然后 proc2 递增 val 并打印它。
到目前为止,我的实验表明,这两个进程都保留了变量的副本,如果第一个增加它,第二个仍然会读取 0。所以行为不像 Windows DLL...
我在这里的一篇文章中读到,如果全局变量 不是 静态的(在 lib 中)并且它在 lib 标头中声明为 extern,则 var 对于所有进程都是唯一的。但到目前为止,我还没有能够做到这一点 - var 仍然是每个进程的副本。
有人可以对此提供很好的解释吗?以及如何做到这一点...
【问题讨论】:
-
每个进程的数据都是私有的 - Windows DLL 有何不同?我想你想要的是Shared Memory 在进程之间共享数据,对吧?
-
有人告诉我,Win DLL 不是这种情况,但我想这不是真的...我想要一个单例,但不知道该怎么做...我有 2进程和 1 个库。
-
“单例”通常意味着每个进程一个实例。
-
好的,所以按照下面的 cmets 我需要 SharedMemory。是否可以从 Lib 中创建这样的内存,然后在每个使用该 lib 的进程中使用它?
标签: c linux shared-libraries