Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Инструменты для разработчиков игр и не только - 26.02

>
>
>
V2670. MISRA. Thread objects, thread...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2670. MISRA. Thread objects, thread synchronization objects, and thread-specific storage pointers should only be accessed by the appropriate Standard Library functions.

05 Фев 2026

Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Правило актуально только для языка С.

Доступ к объектам потока исполнения (thrd_t), мьютексам (mtx_t), условным переменным (cnd_t) и специфичным для потоков хранилищам (tss_t) должен осуществляться исключительно через специальные функции, предоставляемые стандартной библиотекой:

Прямой доступ к членам структур, их копирование, модификация или сравнение любыми другими способами приводят к неопределённому поведению.

Рассмотрим пример:

thrd_t thread1, thread2;

int threads_equal(const thrd_t *t1, const thrd_t *t2)
{
  return memcmp(t1, t2, sizeof(thrd_t));
}

Функция memcmp выполняет побайтовое сравнение двух объектов типа thrd_t. Однако программист может не знать, каким именно образом поток исполнения будет реализован в той или иной стандартной библиотеке C. Это может привести к тому, что два одинаковых потока могут считаться различными, например, из-за байтов выравнивания.

Для корректного сравнения объектов типа thrd_t и написания переносимого кода следует использовать функцию thrd_equal:

int threads_equal(const thrd_t *t1, const thrd_t *t2)
{
  return thrd_equal(t1, t2);
}

Данная диагностика классифицируется как:

  • MISRA-C-2023-22.12