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