Идентификатор потока из неудачного создания потока, используемый в последующих функциях потока
Этот дефект возникает, когда функция создания потоков, такая как pthread_create
не удается, но вы продолжаете использовать идентификатор из создания потока.
Для образца, pthread_join
использует неопределенный идентификатор потока после сбоя при создании предыдущего потока. Ненулевое значение возврата от pthread_create
указывает на неудачу создания потока.
pthread_t id; if(0! = pthread_create(&id, attr, start_func, NULL)) { ... phread_join(id, NULL); ... }
pthread_create
.Согласно POSIX® стандартный, если создание потока прекращается, содержимое идентификатора потока не определено. Использование неопределенного идентификатора потока может привести к непредсказуемым результатам.
Проблема часто указывает на ошибку программирования. Например, возможно, что вы проверили ненулевые значения, чтобы определить успешное создание потока:
if(0 != pthread_create(&id, attr, start_func, NULL))
if(0 == pthread_create(&id, attr, start_func, NULL))
Если использование неопределенного идентификатора потока происходит из-за ошибки программирования, исправьте ошибку. В противном случае удалите функции потока, которые используют неопределенный идентификатор.
Группа: Параллелизм |
Язык: C |
По умолчанию: Off |
Синтаксис командной строки
: UNDEFINED_THREAD_ID |
Влияние: Средний |
Join or detach of a joined or detached thread
| Missing or double initialization of thread attribute