c - 在 Linux 中何时使用 pthread_exit() 以及何时使用 pthread_join()?

标签 c linux pthreads

我是 pthreads 的新手,我正在努力理解它。我看到了一些类似下面的例子。

我可以看到 main()被 API pthread_exit() 阻止,并且我看到了主要功能被 API pthread_join() 阻止的示例.我无法理解何时使用什么?

我指的是以下网站 - https://computing.llnl.gov/tutorials/pthreads/ .我无法理解何时使用 pthread_join()以及何时使用 pthread_exit() .

有人可以解释一下吗?此外,我们将不胜感激 pthreads 的良好教程链接。

#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()将退出调用它的线程。

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

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

这在您想等待线程终止后再进一步的情况下很有用 在主线程中处理。

关于c - 在 Linux 中何时使用 pthread_exit() 以及何时使用 pthread_join()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824229/

相关文章:

linux - Bash:使用 SSH 启动长时间运行的远程命令并收集其 PID

c - {USB Composite Device Kernel Module Driver Programming}多接口(interface)管理和 "no endpoint"处理

c - C 中的显式类型转换

c - 不将二维数组的行数传递给 c 中的函数

linux - SMTP(500 Access Denied) 错误,但我可以将邮件发送到 gmail 或 hotmail

c - 尝试将 GCC 特定的 asm goto 移植到 Clang

c - 使用 fread 时出现段错误,无法从文件中读取数据

linux - Pthread 线程和信号

c - pthread_join() 导致段错误

c - c中的pthread条件等待