Дублированная инициализация атрибутов потока или неинициализированный атрибут потока, используемый в функциях, которые ожидают инициализированных атрибутов
Этот дефект возникает во время одной из следующих ситуаций:
Вы дважды инициализируете атрибут потока с функцией, такой как 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 |
По умолчанию: Off |
Синтаксис командной строки
: BAD_THREAD_ATTRIBUTE |
Влияние: Средний |