Идентификатор потока из неудачного создания потока, используемого в последующих функциях потока
Этот дефект возникает, когда функция создания потока, такая как 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 |
| По умолчанию: Откл. |
Синтаксис командной строки:
UNDEFINED_THREAD_ID |
| Воздействие: среднее |
Join or detach of a joined or detached thread | Missing or double initialization of thread attribute