Реализация pthread_self () в C - PullRequest
       2

Реализация pthread_self () в C

0 голосов
/ 05 октября 2018

Я пытаюсь реализовать pthread_self() в C, но я не совсем понимаю, что именно он делает.Я знаю, что он возвращает идентификатор потока, но является ли этот идентификатор местом в памяти, потому что он возвращает pthread_t, что я не уверен, как интерпретировать.Кроме того, как мне получить идентификатор потока, просто создать новый поток и вернуть его?

1 Ответ

0 голосов
/ 05 октября 2018

pthread_self () возвращает идентификатор потока.Пожалуйста, проверьте man-страницы для pthread_self и pthread_create.

man 3 pthread_self
man 3 pthread_create

Для pthread_create () первый аргумент имеет тип pthread_t.Ему присваивается идентификатор вновь созданного потока.Этот идентификатор используется для идентификации потока для других функций pthread.Абстрактный тип pthread_t зависит от реализации.

Перед возвратом, успешный вызов pthread_create () сохраняет идентификатор нового потока в буфере, на который указывает поток;этот идентификатор используется для ссылки на поток при последующих вызовах других функций pthread.

pthread_self возвращает тот же идентификатор, который 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 для получения дополнительной информации о потоках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...