在C中实现pthread_self()

时间:2018-10-05 03:11:11

标签: c pthreads

我正在尝试在C中实现pthread_self(),但是我对其确切的功能感到困惑。我知道它返回线程ID,但是该ID是内存位置,因为它返回一个pthread_t,我不确定该如何解释。另外,我将如何检索线程的ID,我是否只是创建一个新线程并返回它?

1 个答案:

答案 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,以获取有关线程的更多信息。