pthread_join 中的“状态”到底代表什么以及如何查询它

2024-02-02

我想知道 pthread_join 中的“status”参数到底是用来做什么的

int pthread_join(pthread_t thread, void **status);

我正在尝试利用它,但我无法理解它到底代表什么。 根据文档

status

Is the location where the exit status of the joined thread is stored.

如果退出,则可以将其设置为 NULL 状态不是必需的。

好的。听起来不错。我该如何使用它?我看过一些例子,但我不能 掌握它的窍门(有些例子在使用它时是完全错误的)。所以我去了 来源。在 glibc 实现中,我发现了以下 pthread_join 测试:

...
pthread_t mh = (pthread_t) arg;
void *result;
...
if (pthread_join (mh, &result) != 0)
{
  puts ("join failed");
  exit (1);
}

here follows the WTF moment ...

if (result != (void *) 42l)
{
  printf ("result wrong: expected %p, got %p\n", (void *) 42, result);
  exit (1);
}

所以结果(这是一个地址)的值应该是42?这是全球性的吗 在图书馆级别,因为我找不到任何具体内容test http://sourceware.org/git/?p=glibc.git;a=blob;f=nptl/tst-join1.c;h=95a78ba0b546303801591021923a7f77656a2909;hb=master?

编辑:看来这个问题 https://stackoverflow.com/questions/3692591/return-versus-pthread-exit-in-pthread-start-functions提供与我询问的内容相关的信息


状态设置为线程开始执行的函数返回的值(如果线程提前退出,则设置为传递给 pthread_exit() 的值)。

Example:

 void* thread_func(void* data)
 {
     if (fail())
     {
         pthread_exit((void*)new int(2)); // pointer to int(2) returned to status
     }
     return (void*)new int(1); // pointer to int(1) returned to status;

     // Note: I am not advocating this is a good idea.
     //       Just trying to explain what happens.
 }

 pthread_create(&thread, NULL, thread_func, NULL);

 void*  status;
 pthread_join(thread, &status);
 int*   st = (int*)status;

 // Here status is a pointer to memory returned from thread_func()
 if ((*st) == 1)
 {
      // It worked.
 }
 if ((*st) == 2)
 {
      // It Failed.
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pthread_join 中的“状态”到底代表什么以及如何查询它 的相关文章

随机推荐

  • 为什么应该使用基于文档的数据库而不是关系数据库?

    为什么我应该使用基于文档的数据库 如 CouchDB 而不是使用关系数据库 是否存在基于文档的数据库比关系数据库更适合的典型应用程序或领域 也许你不应该 第二个最明显的答案是 如果您的数据不相关 则应该使用它 这通常表现为没有简单的方法将数
  • Vertx JDBC 客户端 queryWithParams - 如何添加列表?

    我有带条件的 SQL 查询currency in 我正在使用 vertx JDBC 客户端queryWithparams方法 它接收 JsonArray 中的查询参数 我怎样才能传递我的可能列表currency查询的值 我试过new Jso
  • 购物车 $_SESSION 问题

    我正在开发一个基本的购物车 但是 SESSION 变量似乎未正确存储或访问 例如 如果您前往它将显示项目名称 但是在没有任何 GET 变量的情况下刷新 cart php 时 它不会返回任何内容 我究竟做错了什么
  • 如何使用javascript或html打开手机chrome浏览器

    我有两个问题 我要这个 我想使用 javascript 或 html 在其他 Android 移动网络应用程序 例如 naver firefox 等 上打开带有 url 的 chrome 浏览器 所以例子 如果用户在移动网络应用程序上单击
  • 在一台机器上运行多个 MySQL 服务器

    我们可以在一台机器上运行多个 MySQL 服务器吗 Thanks 是的 您只需在单独的端口上运行它们并将它们指向不同的 lib 目录以获取其数据 这是一个很好的参考 http dev mysql com doc refman 5 1 en
  • ASP.NET C# 大文件上传时出现 OutofMemoryException

    我有以下文件上传处理程序 public class FileUploader IHttpHandler public void ProcessRequest HttpContext context HttpRequest request c
  • 如何在表过滤器中显示“未找到记录”消息

    我根据两个 tds 在我的桌子上应用过滤器 过滤器正在工作 但如果没有值匹配 我想显示 未找到记录 消息 这是一个示例演示 filter click function var tdScoring tdEarning var scoring
  • AttributeError:“NoneType”对象没有属性“dpi_scale_trans”

    通过 StackOverflow 检查我遇到的上述错误的可能解决方案后 我发现一些解决方案无法解决这个特定问题 下图显示了尝试在图上绘制多个轴时遇到的错误和获得的不需要的图 This is an image of the expected
  • 错误模板设计

    似乎我在这个网站上读到了关于这个问题的另一个问题 答案 但我不记得答案是什么 现在我找不到原始帖子 我不喜欢 WPF 中的默认错误模板 我了解如何更改此错误模板 但是 如果我将一些内容添加到文本框的末尾 则文本框的大小不会改变 并且添加的内
  • Collections.shuffle() 真的足够随机吗?实际例子似乎否定了这个说法

    我有 1000 个独特的对象java util List 每个都引用一个图像 1000 个列表中的每个图像都是唯一的 现在我想对它们进行洗牌 以便我可以使用前 20 个对象并将它们呈现给网站用户 然后 用户可以单击 随机播放 按钮 然后我再
  • Cordova 应用程序中的触发事件

    我正在尝试触发事件 backbutton pause resume等 从浏览器手动在cordova中 用于调试 我按照以下方式进行 window trigger backbutton 当我们使用注册事件处理程序时 document on b
  • 如何使 Selenium 不等待整个页面加载,其脚本速度很慢?

    硒driver get url 等到整页加载 但是抓取页面会尝试加载一些无效的 JS 脚本 所以我的 Python 脚本等待它并且几分钟后不起作用 这个问题可能出现在网站的每个页面上 from selenium import webdriv
  • Javascript 数组和 Meteor 会话

    我做了一个有趣的观察 当尝试更新存储在 Meteor 会话存储中的数组时 以下代码将不会传播更改 var tags Session get Tags tags push a Session set Tags tags 但是如果我改变第一行来
  • 如何检测 tcp 连接是否已从 ssl 连接转发?

    我正在处理的具体场景是尝试连接到 AWS 弹性负载均衡器后面的 websocket 连接 同时强制使用 https ssl 而不是 http tcp 要启用从 http s 的 TCP SSL 升级 负载均衡器上的协议必须在端口 80 上设
  • 如何防止 NULL 值插入到 Jackson 中的 ObjectNode

    我希望杰克逊在将空值放入 ObjectNode 实例时忽略它们 我知道如何在序列化 pojo 时防止空值 这里我手动将键 值放入 ObjectNode 实例中 并且我希望杰克逊在值为空时忽略要忽略的键 值 例如 objectNode put
  • 从 Android 应用程序使用 OAuth2 访问 Gmail Atom feed 停止工作

    我有一个 Android 应用程序 它可以访问 Gmail Atom 收件箱提要 以只读方式访问未读电子邮件 这就是我所需要的 而且 它最近停止工作了 它正在使用OAuth2 and 谷歌验证工具 这是它的工作原理 在服务中使用 Async
  • 如何让jquery select2动态禁用一个选项?

    我有一些多选 我使用 jquery select2 当在一个多选中选择此选项时 我想禁用其他多选中的一个选项 我写了这段代码 但它确实有效 select multiselect on change function e if e added
  • |1 在 Docker 历史中意味着什么

    鉴于这种Dockerfile FROM debian 8 3 ARG TEST 123 RUN echo TEST 什么是 1在 Docker 历史上有哪些代表 docker history 2feee0d8320f IMAGE CREAT
  • EF Core - 如何使用值对象审计跟踪

    我正在尝试对 Entity Framework Core 中选择的类实现审计跟踪 跟踪更改内容 更改时间和更改者 我当前的实现依赖于覆盖 SaveChangesAsync public override Task
  • pthread_join 中的“状态”到底代表什么以及如何查询它

    我想知道 pthread join 中的 status 参数到底是用来做什么的 int pthread join pthread t thread void status 我正在尝试利用它 但我无法理解它到底代表什么 根据文档 status