我正在尝试在C中实现pthread_self()
,但是我对其确切的功能感到困惑。我知道它返回线程ID,但是该ID是内存位置,因为它返回一个pthread_t
,我不确定该如何解释。另外,我将如何检索线程的ID,我是否只是创建一个新线程并返回它?
答案 0 :(得分:0)
pthread_self()返回线程的ID。请检查手册页中的pthread_self和pthread_create。
man 3 pthread_self
man 3 pthread_create
对于pthread_create(),第一个参数的类型为pthread_t。为它分配了新创建的线程的ID。此ID用于标识其他pthread函数的线程。 pthread_t的抽象类型取决于实现。
在返回之前,成功调用pthread_create()会将新线程的ID存储在线程指向的缓冲区中;此标识符用于在后续对其他pthread函数的调用中引用线程。
pthread_self返回相同的ID,即pthread_create存储在第一个参数“ thread”中的
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
pthread_t pthread_self(void);
在我的系统中,pthread_t类型为“ unsigned long int”
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:typedef unsigned long int pthread_t;
在下面的示例中,pthread_self()和th1返回的值相同。
// main function:
pthread_t th1;
if(rc1 = pthread_create(&th1, NULL, &functionC1, NULL))
{
printf("Thread creation failed, return code %d, errno %d", rc1, errno);
}
printf("Printing thread id %lu\n", th1);
// Thread function:
void *functionC1(void *)
{
printf("In thread function Printing thread id %lu\n", pthread_self());
}
Output:
Printing thread id 140429554910976
In thread function Printing thread id 140429554910976
请查看博客Tech Easy,以获取有关线程的更多信息。