我有一个库foo.so.每次新程序启动时,都会使用此库加载。 我想(以某种方式)声明库中的静态变量并通过一个程序栏询问,该程序栏也使用foo.so库加载,加载了多少程序(使用此库)。我尝试过static和extern,但是每次为每个程序初始化变量为零时(所以当我向bar询问有关计数器时它会告诉我它1)。有可能以某种方式获得我想要的结果吗?
答案 0 :(得分:1)
您需要使用某种跨进程构造。我在linux上没有练习,但我怀疑shared memory或semaphore是一个不错的选择。由于你不会为了它的正常目的使用信号量,它可能看起来有点奇怪,甚至可能会停止工作。但我认为一个简单的信号量方法是执行以下操作:
加载时: sem_open
创建具有唯一名称和计数0的信号量,或打开已创建的信号量。然后sem_post
增加其值。
检查: sem_getvalue
以读取存储在信号量中的当前计数。
卸载时: sem_wait
(或其中一个尝试或超时变体),如果您需要,则递减信号量的计数,然后再按sem_close
仔细清理资源。如果您感觉良好并且可以避免竞争条件,请在他们全部卸载后致电sem_unlink
或sem_destroy
以释放系统资源。
(可选地,您可以尝试在每个位置打开,处理和关闭信号量,以避免必须绕过sem_t
。但是如果系统自动清除未打开的信号量在任何地方,这对你的目的来说都是灾难性的。)