我正在实现一个库。我只能修改文件mylib.c
, mylib.h
,而不能修改main()
另一个文件中的 which 。
当 main() 中的进程调用mylib_init()
时,就可以开始使用mylib.h, mylib.c
函数了。
当一个进程调用时mylib_exit()
,他不能再使用mylib.h, mylib.c
函数。
我想统计当前使用mylib
库的进程数,所以里面mylib_init()
有一个
pthread_atfork(my_prepare_fork, NULL, NULL);
my_prepare_fork() {
p_using_mylib ++;
}
(虽然p_using_mylib
由共享内存实现,但有信号量和应包含的所有内容......)
我在下一次发生时遇到了一个问题:
给定 main() 函数的伪代码:
- 父亲打电话
mylib_init()
- 父亲打电话
mylib_exit()
- 父亲打电话
mylib_init()
//第二次 - 父亲做
fork()
因为mylib_init()
被调用了两次,pthread_atfork()
也被调用了两次,因为现在在fork()
,函数my_prepare_fork()
被调用了两次。=> number ofp_using_mylib
将不正确,这就是问题所在。
所以我想知道:
- 有什么办法可以取消
pthread_atfork()
之前的注册吗? - 有什么方法可以注册一个函数,只在第一次生成主进程时?在这种情况下,我可以在这个函数中初始化
pthread_atfork()
- 还有其他方法可以解决这个问题吗?
谢谢!