我正在实施一个库。我只能修改文件mylib.c
,mylib.h
,而不能修改其他文件中的main()
文件。
当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()
被调用两次。
=> p_using_mylib
的数量不正确,这就是问题所在。
所以我想知道:
pthread_atfork()
?pthread_atfork()
谢谢!
答案 0 :(得分:1)
无法“取消注册”pthread_atfork
个功能。您应该使用pthread_once
来保护所有初始化类型的例程不会被多次运行。