我正在实现一个库。我只能修改文件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() - 还有其他方法可以解决这个问题吗?
谢谢!