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

2023-11-24

在我的析构函数中,我想干净地销毁线程。

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

我发现查询 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 清理处理程序

您需要包含相应的 pthread_cleanup_pop(1) 调用,以确保无论如何都会调用清理处理程序(即,如果线程正常退出或由于取消等)。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查询 pthread 以查看它是否仍在运行? 的相关文章

  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • Rx.NET 中是否有一个Subject 实现,其功能类似于BehaviourSubject,但仅在值发生更改时才发出?

    有没有Subject https learn microsoft com en us previous versions dotnet reactive extensions hh229699 v vs 103 Rx NET 中的实现在功能
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 获取 Future 对象的进度的能力

    参考 java util concurrent 包和 Future 接口 我注意到 除非我弄错了 只有 SwingWorker 实现类才能启动冗长的任务并能够查询进度 这就引出了以下问题 有没有办法在非 GUI 非 Swing 应用程序 映
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 清除 Magento 缓存

    我正在使用 Magento 1 6 1 版 我需要以编程方式清除 Magento 缓存 Mage app gt getCache gt clean 我使用了上面的代码 但它没有清除缓存 try this Mage app gt cleanC
  • 如何正确更新我的图表值? (实时)

    我最近遇到了一个名为 LiveChart 的工具 并决定对其进行测试 不幸的是 我在弄清楚如何实时更新图表值时遇到了一些问题 我很确定有一种干净且正确的方法可以做到这一点 但我无法找到它 我希望能够通过更新值private void或按钮
  • ExtJs:在组合框中搜索/过滤

    我在 ExtJs 2 3 中遇到以下问题 我想在组合框中进行搜索 我给你举个例子 Ext comboData names Peter Paul Amanda var store new Ext data SimpleStore fields
  • surfaceView.getHolder 不返回 SurfaceHolder

    我正在尝试编写一个使用相机的应用程序 当尝试获取最终传递给启动相机的 surfaceCreated 的 surfaceHolder 时 我收到 NullPointerException getHolder 是否有返回NULL的情况 than
  • 如何连接 sparql 中的值列表?

    假设我有一个urihttp dbpedia org page Manmohan Singh现在他的标签 dbpprop years 中有一个年份列表 当我写一个查询时 PREFIX rdf
  • 在匿名方法中使用 MethodInfo.GetCurrentMethod()

    public static void Main string args Action a gt Console WriteLine MethodInfo GetCurrentMethod Name a 这段代码将返回一个模糊的字符串 如下所
  • CORS - 是客户端、服务器端还是传输层? [复制]

    这个问题在这里已经有答案了 我试图理解CORS 根据我的理解 它使您能够限制哪些域可以访问服务器上的资源 然而 这似乎并不是故事的全部 例如 我有一个未启用 CORS 的 Web 服务 我无法通过 jQuery 从我的 Web 应用程序访问
  • 具有自签名证书的 Python 3 urllib

    我正在尝试使用 Python 从内部服务器下载一些数据 由于它是内部的 因此它使用自签名证书 我们不想为永远不会出现在 野外 的服务器付费 Python 2 6 版本的代码运行良好 response urllib2 urlopen URL
  • ReactJS:警告:setState(...):无法在现有状态转换期间更新

    我正在尝试从渲染视图重构以下代码
  • Python内存映射

    我正在处理大数据 并且我的矩阵大小约为 2000x100000 因此为了更快地工作 我尝试使用 numpy memmap 来避免由于 RAM 限制而在内存中存储这么大的矩阵 问题是 当我将相同的矩阵存储在两个变量中时 即一个使用 numpy
  • 在 Rails 中存储应用程序特定配置的最佳方法是什么?

    我需要在 Rails 中存储应用程序特定的配置 但它必须是 可在任何文件 模型 视图 助手和控制器 中访问 指定 或未指定 环境 这意味着每个环境都可以覆盖environment rb中指定的配置 我尝试使用environment rb并放
  • 致命错误:未找到类“Illuminate\Foundation\Application”

    当我打开使用 laravel 5 制作的网站时出现以下错误 致命错误 在第 14 行的 C cms bootstrap app php 中未找到 Illuminate Foundation Application 类 我尝试删除供应商文件夹
  • 在运行时加载 Java 字节代码

    我得到了一些在我的程序中生成的java字节代码 因此编译了java源代码 现在我想将此字节码加载到当前运行的 Java VM 中并运行特定的函数 我不知道如何实现这一点 我深入研究了 Java 类加载器 但没有找到直接的方法 我找到了一个解
  • 在 Android 模拟器上通过 appium 或 adb 启用“show_touches”

    是否可以从 appium 启用 android 上的 show touches 选项 还是通过adb 我有一个 appium 测试脚本 它的行为不正常 我不知道为什么 我想看看它到底在哪里点击 adb shell settings put
  • Apollo 客户端:变量未定义。收到状态码 400

    我正在尝试使用 Apollo 客户端在 GraphQL 查询中使用动态变量 我已遵循文档 但 Apollo 不断给我错误 说我的变量未定义 并最终以状态代码 400 进行响应 Apollo 的文档是这样说的 mutate 选项 Mutati
  • Rails 应用程序中的 Cookie 溢出?

    UsersController create 中的 ActionDispatch Cookies CookieOverflow 当我尝试打开该页面时出现此错误 我不知道如何调试这个错误 您对这个问题有什么建议吗 def create use
  • 如何获取 VSS 快照的“NextUSN”日志条目?

    创建 VSS 快照后 我希望能够查询 USN 日志 这是否可能 或者 USN 日志是否无法从 VSS 快照访问 my goal 是能够在两个 VSS 快照之间的增量备份中使用 USN 日志 备份的过程是 拍摄 VSS 快照并备份卷 记下每个
  • 如何在 Excel VBA 中使用 .NET 对象?

    VBA 代码可以实例化和使用 NET 对象吗 我感兴趣的具体类是 System IO Compression GZipStream For InfoGAC 是 NET 全局程序集缓存 我认为 Andy 明确了这个答案 但我不确定有关 CLR
  • Java:使用整数常量声明枚举时遇到问题

    呃 我对 Java 中枚举的工作原理有点困惑 在 C 和 C 我通常使用的 中 这似乎没问题 但 Java 想要生我的气 gt gt enum Direction NORTH WEST 0x0C NORTH 0x10 NORTH EAST
  • 如何查询 pthread 以查看它是否仍在运行?

    在我的析构函数中 我想干净地销毁线程 我的目标是等待线程完成执行 然后销毁该线程 我发现查询 pthread 状态的唯一内容是pthread attr setdetachstate但这只能告诉您您的线程是否是 PTHREAD CREATE