当前位置: 首页 > 面试题库 >

在Linux中何时使用pthread_exit()和何时使用pthread_join()?

公良奇
2023-03-14
问题内容

我是pthread的新手,我正试图了解它。我看到了一些类似以下的示例。

我可以看到main()API阻止了它pthread_exit(),并且我看到了一些示例,其中主要功能都被API阻止了pthread_join()。我不明白什么时候使用什么?

我指的是以下站点-https://computing.llnl.gov/tutorials/pthreads/。我无法获得何时使用pthread_join()和何时使用的概念pthread_exit()

有人可以解释一下吗?此外,将感谢一个很好的pthread教程链接。

#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS     5

void *PrintHello(void *threadid)
{
   long tid;
   tid = (long)threadid;
   printf("Hello World! It's me, thread #%ld!\n", tid);
   pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
   pthread_t threads[NUM_THREADS];
   int rc;
   long t;
   for(t=0; t<NUM_THREADS; t++){
      printf("In main: creating thread %ld\n", t);
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
      if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
         exit(-1);
      }
   }

   /* Last thing that main() should do */
   pthread_exit(NULL);

实现了另一件事,即

pthread_cancel(thread);
pthread_join(thread, NULL);

有时,您想在执行线程时取消它。您可以使用pthread_cancel(thread);进行此操作。但是,请记住,您需要启用pthread取消支持。此外,取消时还会清理代码。

thread_cleanup_push(my_thread_cleanup_handler, resources);
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, 0);

static void my_thread_cleanup_handler(void *arg)
{
  // free
  // close, fclose
}

问题答案:

如openpub文档中所述,

pthread_exit()
将退出调用它的线程。

在您的情况下,由于主调用它,主 线程 将终止,而您生成的线程将继续执行。这主要用于仅需要主线程产生线程并让线程完成工作的情况

pthread_join
除非目标线程终止,否则它将暂停执行已调用它的线程

这在您要等待线程终止以在主线程中进行进一步处理之前非常有用。



 类似资料:
  • 问题内容: 我一直在nodejs中编程,研究了如何同时使用socket.io和对节点服务器的ajax调用。socket.io是否设计为替代ajax?我很好奇,在哪种情况下使用socket.io更好,而哪种ajax更好。感谢您的输入。 问题答案: 好吧,Web套接字(通过socket.io)提供的主要内容之一就是ajax缺乏的是服务器推送。因此,对于ajax,如果您想了解服务器上的新事件(例如,另一

  • 我想使用ProcessBuilder运行此命令: 我尝试了以下方法: 我使用的是如下:

  • 问题内容: 我得到了asyncio在Python 3.5 中使用的流程,但是我还没有看到关于我应该使用什么东西,我不应该使用的await东西或者它在哪里容易出现的描述。我是否仅需要根据“这是IO操作并应进行await编辑” 来做出最好的判断? 问题答案: 默认情况下,所有代码都是同步的。你可以使用使其异步定义函数,async def并使用来“调用”这些函数await。一个更正确的问题是“什么时候应

  • 问题内容: 我感觉好像总是被教导要使用s,并且我经常看到它们与s 混合使用,以在应该在不同页面上执行相同操作的几段代码中完成相同类型的查询。开始: 那就是我正在从事的工作: 我看到很多像: 似乎LEFT也可能是INNER,有没有抓住的机会? 问题答案: 有收获吗?是的-左联接是外联接的一种形式,而内联接是内联接的一种形式。 这是显示差异的示例。我们将从基本数据开始: 在这里,我们将看到内部联接和左

  • 我有一个Employee类,它有如下3个字段。 为此,我希望根据员工姓名(empName)排序,如果多个员工的姓名相同,则根据员工id(empId)排序。 为此,我编写了一个自定义比较器,使用java.util.比较器如下所示。 我已经创建了8个Employee对象并添加到ArrayList中,如下所示。 并使用上述比较器对列表进行如下排序。 它工作得非常好。但这可以使用类似的方法来完成,如下所示

  • 使用Maven Tycho插件的目的是什么。我在这里读到了tycho用于构建eclipse插件和OSGI包。 问题:-我们难道不能只使用普通的旧maven pom.xml文件[不使用tycho插件]来构建eclipse插件和OSGI包吗。 maven需要什么tycho插件来帮助它构建eclipse插件和OSGI包? 为什么我们要使用Maven tycho插件来构建eclipse插件和OSGI包?