gpt4 book ai didi

c - pthread_atfork() 被多次调用导致 after fork() 函数被多次调用

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:10 24 4
gpt4 key购买 nike

我正在实现一个库。我只能修改文件 mylib.cmylib.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() 函数的伪代码:

  1. 父亲调用mylib_init()
  2. 父亲调用mylib_exit()
  3. 父亲调用mylib_init()//第二次
  4. 父亲做 fork()

因为 mylib_init() 调用了两次,pthread_atfork() 也调用了两次,因此现在在 fork() 处,函数my_prepare_fork() 被调用了两次。=> p_using_mylib 的数量不正确,这就是问题所在。

所以我想知道:

  1. 有什么方法可以注销之前的pthread_atfork()吗?
  2. 有没有办法注册一个函数,只在主进程第一次出现时注册?在这种情况下,我可以在这个函数中放入 pthread_atfork()
  3. 的初始化
  4. 还有其他方法可以解决这个问题吗?

谢谢!

最佳答案

无法“注销”pthread_atfork 函数。您应该使用 pthread_once 来保护所有初始化类型的例程不被多次运行。

关于c - pthread_atfork() 被多次调用导致 after fork() 函数被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com