可连接和可拆卸螺纹的主要区别是什么。它与CPU开销有关吗?

时间:2015-08-20 05:34:08

标签: c pthreads

pthread_t tid;
pthread_create(&tid, NULL, thr_loop, NULL);

如果我传递一些值而不是传递NULL会发生什么?

1 个答案:

答案 0 :(得分:2)

嗯,根据manpage,最后一个参数是一个用户定义的参数,它被传递给新线程调用的函数。

 static void *
   thread_start(void *arg)
   {
       struct thread_info *tinfo = arg;
       char *uargv, *p;

       printf("Thread %d: top of stack near %p; argv_string=%s\n",
               tinfo->thread_num, &p, tinfo->argv_string);

       uargv = strdup(tinfo->argv_string);
       if (uargv == NULL)
           handle_error("strdup");

       for (p = uargv; *p != '\0'; p++)
           *p = toupper(*p);

       return uargv;
   }

之后他们将pthread_create称为如下

pthread_create(&tinfo[tnum].thread_id, &attr,&thread_start, &tinfo[tnum]);

正如您所看到的,传递给函数的参数随后被传递 到thread_start函数。你可以在这里传递你喜欢的一切。

更新

我刚刚看到,你也可以提出其他NULL值。所以我也要解释一下:

  1. PTHREAD_CREATE_DETACHED - 如果调用线程不想等待已创建线程的终止,则应使用此状态创建它。
  2. PTHREAD_CREATE_JOINABLE - 假设您正在以某种方式等待线程,例如pthread_join
  3. 如需进一步阅读,我可以推荐this网页。