【发布时间】:2017-06-23 04:41:06
【问题描述】:
给定以下代码
#include <pthread.h>
void *pt_routine(void *arg)
{
pthread_t *tid;
tid = (pthread_t *) arg;
/* do something with tid , say printf?*/
/*
printf("The thread ID is %lu\n", *tid);
*/
return NULL;
}
int main(int argc, char **argv)
{
int rc;
pthread_t tid;
rc = pthread_create(&tid, NULL, pt_routine, &tid);
if (rc)
{
return 1;
}
printf("The new thread is %lu\n", tid);
pthread_join(tid, NULL);
return 0;
}
例程总能得到正确的tid吗?
当然我可以使用 pthread 来获取自己的 ID,但我只是想知道例程什么时候运行。
【问题讨论】:
-
“传递给 pthread_create 的例程何时开始?”,在调用
pthread_create()之后?你的问题不清楚。 “例行程序总能得到正确的时间吗?”你什么意思? -
您将
&tid作为pthread_create的第一个参数(pthread_create应该存储新线程 ID 的位置)和pthread_create的第四个参数(被传递到pt_routine)。这听起来就像您在询问pt_routine是否有可能在pthread_create实际将线程的ID 存储在该地址之前运行并取消引用它的arg。对吗?