Перейти к содержанию
    

Чем отличаются бинарные семафоры от мютексов

Недавно нашел непростой баг. При переходе с 7 на 10 версию FreeRTOS система подвисала. Проблема оказалась была связана с мютексом. Дело в том, что мютекс имеет хозяина (тред, который его установил) и снять его может только тот кто поставил. В семерке это игнорировалось. В версии 10 тред, который не был хозяином использовал неинициалисированный указатель, что приводило к exception.
Затруднило поиск отсутствие системы защиты памяти.
Заменили мютекс на бинарный семафор и стало можно снимать его не тем тредом, который его установил.

Зато хорошо запомнил чем отличаются вышеназванные семафоры.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А еще хозяин может сколько угодно раз устанавливать мьютекс, это не приведет к ошибке. И освободить его все-равно будет достаточно один раз. А семафор - если он не бинарный, aka флаг - на каждый set будет увеличивать значение на единичку и на каждый clear уменьшать на единичку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Quote

использовал неинициалисированный указатель

Включайте assert такие места быстро найдутся

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...