c++ - 计算使用共享库的程序数

标签 c++ linux static global

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

最佳答案

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

加载中: sem_open创建具有唯一名称和计数 0 的信号量,或打开已创建的信号量。那么sem_post增加它的值(value)。

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

卸载时: sem_wait (或其尝试或超时变体之一)减少信号量的计数,然后是 sem_close如果您正在仔细清理资源。如果您感觉良好并且可以避免竞争条件,请调用 sem_unlinksem_destroy在系统资源全部卸载后释放系统资源。

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

关于c++ - 计算使用共享库的程序数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24064412/

相关文章:

linux - 无法将 Genymotion 路径添加到 PATH 变量 linux xubuntu

java - 通过 sh 脚本启动 jar 工作正常,但通过 crontab 给出 ClassFormatError

linux - 在 shell 脚本中具有 $ 值的变量

django - 如何在 django View 中检索静态文件的内容?

static - 没有静态/编译语言 exp 的程序员应该从哪里开始学习 Go?

java - Java静态属性会影响性能吗?

c++ - icu::UnicodeString with boost 序列化

c++ - Lua - 初始化

C++ 将txt文件逐行读取到结构数组中的char数组中

c++ - opencv:如何将 float 组保存为图像