Что произойдет, если pthreadId равен нулю в pthread_join (pthreadId, NULL) на Android? - PullRequest
0 голосов
/ 10 октября 2018

Что произойдет, если pthreadId равен нулю в pthread_join (pthreadId, NULL) на Android?Как следующий фрагмент кода:

pthread_join(0, NNULL);

1 Ответ

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

pthread_join () используется для ожидания завершения потока, указанного в идентификатор потока .Это необходимо для того, чтобы процесс не завершился до завершения выполнения потока.

Поток идентифицируется по идентификатору потока.Теперь, если вы укажете 0 в качестве идентификатора потока, он не найдет поток и немедленно выдаст ошибку.

Так что, если вы используете 0 в качестве идентификатора потока для всех созданных потоков, возможно, что до завершения потоковназначенная работа, процесс может завершиться.

В моей системе, если я даю 0 в качестве идентификатора потока, он возвращает ошибку с номером 3 (ESRCH Нет потока с идентификатором потока.)

Несколько баллов:

  • Вы можете распечатать идентификатор потока и проверить, какие значения обычно даются для идентификатора потока, чтобы лучше его понять.
  • Возможно, вам понадобится абстрактный типидентификатор потока, чтобы напечатать его значение.Пожалуйста, найдите в /usr/include/.../pthreadtypes.h, чтобы получить абстрактный тип pthread_t.В моей системе это unsigned long int .

    /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:typedef unsigned long int         pthread_t;
    
  • При отладке с помощью GDB он присваивает номер потока каждому потоку.Рядом с потоком находится идентификатор потока, назначенный функцией pthread_create.Для потока номер 1, идентификатор потока равен 0x7f5750718740.

    (gdb) info threads
      Id   Target Id         Frame 
    * 1    Thread 0x7f5750718740 (LWP 9215) "a.out" 0x00007f57502f2d2d in         __GI___pthread_timedjoin_ex (
        threadid=140012979980032, thread_return=0x0, abstime=0x0, block=<optimized         out>) at pthread_join_common.c:89
      2    Thread 0x7f574fef8700 (LWP 9216) "a.out" __lll_lock_wait ()
        at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
    

Пожалуйста, проверьте Tech Easy для получения дополнительной информации о потоках.

...