gpt4 book ai didi

c - 您如何查询 pthread 以查看它是否仍在运行?

转载 作者:太空狗 更新时间:2023-10-29 16:18:39 40 4
gpt4 key购买 nike

在我的析构函数中,我想彻底销毁一个线程。

我的目标是等待一个线程完成执行,然后销毁该线程。

关于查询 pthread 的状态,我唯一发现的是 pthread_attr_setdetachstate但这只会告诉您线程是否:

  • PTHREAD_CREATE_DETACHED
  • PTHREAD_CREATE_JOINABLE

这两个都与线程是否还在运行无关。

如何查询 pthread 以查看它是否仍在运行?

最佳答案

听起来你在这里有两个问题:

我如何才能等到我的线程完成?

回答:这是直接由 pthreads 支持的——让你的待停止线程 JOINABLE(当它第一次启动时),并使用 pthread_join() 阻塞你的当前线程,直到待停止线程不再运行。


如何判断我的线程是否仍在运行?

答案:您可以添加一个“thread_complete”标志来完成此操作:

场景:线程 A 想知道线程 B 是否还活着。

当线程 B 创建时,它被赋予一个指向“thread_complete”标志地址的指针。在创建线程之前,“thread_complete”标志应初始化为 NOT_COMPLETED。线程 B 的入口点函数应立即调用 pthread_cleanup_push() 以推送将“thread_complete”标志设置为已完成的“清理处理程序”。

在此处查看有关清理处理程序的详细信息:pthread cleanup handlers

您需要包含相应的 pthread_cleanup_pop(1) 调用以确保无论发生什么情况(即线程正常退出或由于取消等)都会调用清理处理程序。

然后,线程 A 可以简单地检查“thread_complete”标志以查看线程 B 是否已经退出。

注意:您的“thread_complete”标志应声明为“volatile”并且应该是原子类型——GNU 编译器为此提供了 sig_atomic_t。这允许两个线程一致地访问相同的数据,而不需要同步结构(互斥量/信号量)。

关于c - 您如何查询 pthread 以查看它是否仍在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156353/

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