使用共享库计算程序数

时间:2014-06-05 15:36:20

标签: c++ linux static global

我有一个库foo.so.每次新程序启动时,都会使用此库加载。 我想(以某种方式)声明库中的静态变量并通过一个程序栏询问,该程序栏也使用foo.so库加载,加载了多少程序(使用此库)。我尝试过static和extern,但是每次为每个程序初始化变量为零时(所以当我向bar询问有关计数器时它会告诉我它1)。有可能以某种方式获得我想要的结果吗?

1 个答案:

答案 0 :(得分:1)

您需要使用某种跨进程构造。我在linux上没有练习,但我怀疑shared memorysemaphore是一个不错的选择。由于你不会为了它的正常目的使用信号量,它可能看起来有点奇怪,甚至可能会停止工作。但我认为一个简单的信号量方法是执行以下操作:

加载时: sem_open创建具有唯一名称和计数0的信号量,或打开已创建的信号量。然后sem_post增加其值。

检查: sem_getvalue以读取存储在信号量中的当前计数。

卸载时: sem_wait(或其中一个尝试或超时变体),如果您需要,则递减信号量的计数,然后再按sem_close仔细清理资源。如果您感觉良好并且可以避免竞争条件,请在他们全部卸载后致电sem_unlinksem_destroy以释放系统资源。

(可选地,您可以尝试在每个位置打开,处理和关闭信号量,以避免必须绕过sem_t。但是如果系统自动清除未打开的信号量在任何地方,这对你的目的来说都是灾难性的。)