8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

为什么当我们可以使用 return 时要使用 pthread_exit() ?

Gregoire 1月前

18 0

在以下程序中,返回 p 给出与 pthread_exit(p) 相同的输出。那么为什么要使用 pthread_exit()?void *foo(void *p){ *((int *)p) += 1; pthread_exit(p);}int main(){ pthr...

以下程序 return p 给出的输出与 相同 pthread_exit(p) 。那么为什么要使用 pthread_exit()

void *foo(void *p){
    *((int *)p) += 1;
    pthread_exit(p);

}

int main()
{
    pthread_t t;
    int i=9;
    int *j;
    pthread_create(&t,NULL, foo, &i);
    pthread_join(t,(void**)&j);
    printf("%d\n",*j);
}
帖子版权声明 1、本帖标题:为什么当我们可以使用 return 时要使用 pthread_exit() ?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gregoire在本站《multithreading》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 另一个原因:假设您启动了一个线程。该线程调用您的一个函数,该函数又调用另一个函数,但该函数由于不可恢复的错误而失败。与其从该函数返回并继续执行,不如检查返回值是否存在错误条件(这只会导致线程退出),您可以改为调用

  • pthread_exit() 对于线程来说,就像 exit() 对于主程序来说一样。

    您总是可以使用来终止主程序吗 return ?我想不行。这就是 exit() pthread_exit()

    从线程的主函数返回会隐式调用 pthread_exit() 。无论您如何终止线程,都会调用该函数。它负责线程的清理。

    但是如果函数 foo() 调用函数 bar() bar() 决定必须终止线程,则调用 pthread_exit() 比从返回 bar() 并检查返回值 foo() 当链中的调用次数增加时, return 烦恼也会

  • 如果你使用通过以下方式安装的清理处理程序,那么这两者之间的区别就很重要 pthread_cleanup_push

    pthread_cleanup_push 手册页上可以看到:

    1. 当一个线程被取消时,所有堆叠的清理处理程序都将被弹出,并按照与它们被推送到堆栈上的顺序相反的顺序执行。
    2. 当线程通过调用 pthread_exit(3) 终止时,所有清理处理程序都将按上一点所述执行。( 如果线程通过执行线程启动函数的返回而终止,则不会调用清理处理程序。) )

    因此,如果你安装了清理处理程序,则使用 return 时不会调用它们,但使用时会调用它们 pthread_exit .

  • 奇怪的是,pubs.opengroup.org/onlinepubs/9699919799 说:无论线程终止的方法是什么,任何已被推送但尚未弹出的取消清理处理程序都会被执行,并且任何现有线程特定数据的析构函数都会被执行。这让我怀疑这是不是措辞不当,或者 Linux 在这里与 POSIX 有所不同。有人知道吗?

返回
作者最近主题: