Jump to content
    

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Quote

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...