pthread_t tid;
pthread_create(&tid, NULL, thr_loop, NULL);
如果我传递一些值而不是传递NULL会发生什么?
答案 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
值。所以我也要解释一下:
PTHREAD_CREATE_DETACHED
- 如果调用线程不想等待已创建线程的终止,则应使用此状态创建它。PTHREAD_CREATE_JOINABLE
- 假设您正在以某种方式等待线程,例如pthread_join
如需进一步阅读,我可以推荐this网页。