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