我不熟悉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);

有时,您希望在线程执行时取消它.

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++相关问答推荐

uintPtr_t上的算术

为什么下面的C代码会进入无限循环?

找出文件是否包含给定的文件签名

如何在C宏中确定Windows主目录?

使用NameSurname扫描到两个单独的字符串

如何跨平台处理UTF-16字符串?

用C宏替换strncMP函数中的参数

Rust FFI--如何用给出返回引用的迭代器包装C风格的迭代器?

C++中矢量类型定义和数据保护的高效解决方案

在CLANG中调试预处理器宏

用C++实现余弦函数

RawMotion的XInput2错误(具有较高值的XISelectEvents上的BadValue)

处理来自浏览器的HTTP请求

如何在C++中安全地进行浮点运算

理解bzip2的BZ2_解压缩函数中的状态重新分配

合并对 struct 数组进行排序

从C中的函数返回静态字符串是不是一种糟糕的做法?

从整型转换为浮点型可能会改变其值.

是否有单独的缓冲区用于读写库调用?

使用邻接表创建图