在pthread_cancel()之后,pthread_join()函数调用挂断

时间:2018-11-29 05:15:39

标签: multithreading pthreads pthread-join

我已经编写了一个应用程序,该应用程序创建了一个线程并遇到while循环。 在产生线程之后的应用程序中,我已用fork()覆盖了pthread_atfork()系统调用。 [当调用fork时,将调用prepare函数调用,该函数将取消线程,并在生成子进程之后再次生成同一线程。]

我在上述逻辑中遇到问题,当将相同的代码编译到不同的目标时,pthread_join()中会出现挂断。

  1. 生成一个线程,该线程会进入while循环。(我添加了cancel state = Enabled和cancel type = asynchronous +还考虑了取消点)
  2. fork()覆盖pthread_atfork()
  3. 执行fork()系统调用时,prepare函数使用pthread_cancel取消正在运行的线程,并应用pthread_join()来检查线程是否终止。

此处出现问题,pthread_join()不返回。 在一个特定的目标环境中观察到上述行为。

我有些疑问

  1. pthread_cancel()可以安全打电话吗?
  2. 启用了取消状态=并输入异步类型,pthread_cancel()是否立即取消线程?
  3. 或者还有其他替代方法可以取消线程吗?

0 个答案:

没有答案