Дублированная инициализация атрибутов потока или неинициализированных атрибутов потока, используемых в функциях, которые ожидают инициализированных атрибутов
Этот дефект возникает во время одной из следующих ситуаций:
Инициализация атрибута потока выполняется дважды с помощью такой функции, как pthread_attr_init без промежуточного вызова функции, такой как pthread_attr_destroy.
Функция pthread_attr_destroy уничтожает объект атрибута потока и позволяет системе восстановить ресурсы, связанные с объектом.
Неинициализированный атрибут потока используется в функции, например pthread_create, который ожидает инициализированный атрибут. Атрибут потока может быть неинициализирован, так как он никогда не был инициализирован ранее или уничтожен с помощью pthread_attr_destroy функция.
Неинициализированные атрибуты потока обнаруживаются для всех функций в стандарте POSIX ®.
На панели Сведения о результате (Result Details) описывается, является ли атрибут двойным инициализированным или неинициализированным, а также отображаются предыдущие связанные события.
Обратите внимание, что атрибут потока считается инициализированным, только если вызов pthread_attr_init успешно. Например, атрибут потока не инициализирован в if ветвь здесь:
pthread_attr_t attr;
int thread_success;
thread_success = pthread_attr_init(&attr);
if(thread_success != 0) {
/* Thread attribute considered noninitialized */
}pthread_attr_init.Инициализация атрибута потока без уничтожения ранее инициализированного атрибута или использования неинициализированных атрибутов потока приводит к неопределенному поведению.
Перед использованием атрибута потока инициализируйте атрибут с помощью pthread_attr_init функция.
pthread_attr_t attr;
int thread_success;
/* Initialize attribute */
thread_success = pthread_attr_init(&attr);
if(thread_success != 0) {
/* Handle initialization error */
}
...
/* Use attribute */
thread_sucess = pthread_create(&thr, &attr, &thread_start, NULL);pthread_attr_destroy перед повторной инициализацией:pthread_attr_t attr;
int thread_success;
/* Destroy attribute */
thread_success = pthread_attr_destroy(&attr);
if(thread_success != 0) {
/* Handle destruction error */
}
...
/* Reinitialize attribute */
thread_success = pthread_attr_init(&attr);| Группа: Параллелизм |
| Язык: C |
| По умолчанию: Откл. |
Синтаксис командной строки:
BAD_THREAD_ATTRIBUTE |
| Воздействие: среднее |