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