реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Семафоры и Мютексы
toweroff
сообщение Jun 9 2018, 16:52
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Товарищи, объясните разницу
Мютекс - запрещает доступ от разных процессов
Семафор - имеет счетчик вхождений
получается, мютекс - вырожденная форма семафора с количеством вхождений ==1?
Go to the top of the page
 
+Quote Post
Serge V Iz
сообщение Jun 9 2018, 17:07
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 3-05-18
Пользователь №: 103 639



Цитата(toweroff @ Jun 9 2018, 17:52) *
мютекс - вырожденная форма семафора с количеством вхождений ==1

в плане абстрактной логики примитивов синхронизации.
В плане конкретной реализации он может быть более быстродействующим.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jun 9 2018, 17:13
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Не совсем так.
Мьютекс - это объект синхронизации, имеющий состояния "захвачен" и "отпущен", причем отпустить мьютекс может только тот процесс, который его захватил, в отличие от семафоров. Не забывайте, что есть еще счетные семафоры, а также рекурсивные мьютексы. У них у обоих счетчик захватов/сигнализации увеличивается/уменьшается, только вот опять же, освободить мьютекс может только занявший его процесс. При обработке мьютекса ОС проверяет принадлежность объекта синхронизации к текущему процессу. В случае семафора - нет.

Сообщение отредактировал Arlleex - Jun 9 2018, 17:14
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 9 2018, 20:04
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(toweroff @ Jun 9 2018, 19:52) *
Товарищи, объясните разницу ...

Вот по этой ссылке про это все очень доходчиво расписано. Очень полезный ресурс, рекомендую!


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 10 2018, 10:38
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Forger @ Jun 9 2018, 23:04) *
Вот по этой ссылке про это все очень доходчиво расписано. Очень полезный ресурс, рекомендую!

По какой конкретно ссылке? Если нечего сказать, не говори ничего.
Я согласен со стартовым сообщением. Все остальное - шелуха и заумь.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jun 10 2018, 10:47
Сообщение #6


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (toweroff @ Jun 10 2018, 00:52) *
Товарищи, объясните разницу

Своими словами: мьютекс предназначен для "атомарного доступа". И это доступ к переменным, аппаратному обспечению, коду и т.п. Если один из процессов желает получить доступ к общему ресурсу (который и другие процессы могут использовать), то сначала он должен захватить мьютекс. Если мьютекс свободен, то процесс сразу получает доступ к ресурсу. В противном случае он вынуждет ждать - в течение указанного таймаута. Может дождаться, а может и не дождаться.

Семафоры предназначены для "сигнализации" одним процессом другому. Например, наша задача "А" должна дождаться, пока другая задача "В" выполнит какой-то фрагмент когда, затем послать сигнал в ждущую задачу "А". Задача "А", в свою очередь может продолжить выполняться.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 10 2018, 11:17
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(haker_fox @ Jun 10 2018, 13:47) *
Семафоры предназначены для "сигнализации" одним процессом другому. Например, наша задача "А" должна дождаться, пока другая задача "В" выполнит какой-то фрагмент когда, затем послать сигнал в ждущую задачу "А". Задача "А", в свою очередь может продолжить выполняться.

Не знаю с чего Вы это взяли, но я на uCOS-II вполне себе много лет уже использую семафоры для разграничения доступа задач ОС к разделяемым ресурсам.
И вообще, имхо, значения этих терминов в разных ОС трактуются не одинаково.
Так что вопрос терминологии бессмысленен без привязки к конкретной ОС.
К тому же исходный вопрос ТС ещё и поставлен некорректно: вопрос "в чём отличия функциональности" и "для чего можно применять" - совершенно разные вопросы. Для разделяемого доступа к ресурсам я могу применять хоть семафоры, хоть мьютексы, хоть даже мэйлбоксы или критические секции (или вообще сделать разделяемый доступ на атомарных операциях LDREX/STREX и Sleep(); или очередях и Sleep()) - всё зависит от понимания работы инструмента и уровня компетентности разработчика. laughing.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 10 2018, 11:48
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(ViKo @ Jun 10 2018, 13:38) *
По какой конкретно ссылке?

По любой ссылке, которая ведет в поисковик, поскольку вопрос этот из ясельной группы.
Вангую, что это был банальный "вброс" с известной целью. Ведь вон как на него отреагировали wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jun 10 2018, 12:43
Сообщение #9


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (jcxz @ Jun 10 2018, 19:17) *
Не знаю с чего Вы это взяли

Я вам сейчас всё расскажу. Сегодня по утру я скосил знатную долю ганджубаса на своём поле. Увидев поставленный автором вопрос, я подумал, а почему бы и мне не ответить. Раскурив косячок, и подсоединившись к мировому сознанию, я написал то, что мне пришло в моём видении. И заметьте, это не учитывая более, чем два года работы с FreeRTOS, и более, чем 10-летним знакомством и работой с scmRTOS.

QUOTE (jcxz @ Jun 10 2018, 19:17) *
вполне себе много лет уже использую семафоры

А я разве говорил что-то обратное? Я лишь ответил автору вопроса на поставленный вопрос, и специально дал оговорку "своими словами". Впрочем оговорка была лишней, тут и так никто на истину в первой инстанции претендовать не может. rolleyes.gif

QUOTE (jcxz @ Jun 10 2018, 19:17) *
Для разделяемого доступа к ресурсам я могу применять хоть семафоры, хоть мьютексы, хоть даже мэйлбоксы или критические секции (или вообще сделать разделяемый доступ на атомарных операциях LDREX/STREX и Sleep(); или очередях и Sleep()) - всё зависит от понимания работы инструмента и уровня компетентности разработчика. laughing.gif

Я тоже их применяю. Неразумно защитать одну 4-байтовую переменную мьютексом и дёргать шедулер, когда там проще использовать критическую секцию. Так и сделано в одном из моих проектов. А вот аппаратный SPI я отдал одной из задач (роутеру), и и дал ему очередь, из которой он бесконечно долго ждёт сообщений. Сообщение может послать любой процесс, или даже прерывание. Тут я пришёл к выводу, что мьютекс или критическая секция совершенно не уместны.
Как видите, по одному лишь ответу трудно судить о компетентности. Всё зависит от понимания работы другого человека и уровни компетентности разработчика. rolleyes.gif rolleyes.gif rolleyes.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 10 2018, 14:27
Сообщение #10


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Arlleex @ Jun 9 2018, 20:13) *
Мьютекс - это объект синхронизации, имеющий состояния "захвачен" и "отпущен", причем отпустить мьютекс может только тот процесс, который его захватил, в отличие от семафоров. Не забывайте, что есть еще счетные семафоры, а также рекурсивные мьютексы. У них у обоих счетчик захватов/сигнализации увеличивается/уменьшается, только вот опять же, освободить мьютекс может только занявший его процесс. При обработке мьютекса ОС проверяет принадлежность объекта синхронизации к текущему процессу. В случае семафора - нет.

Но при этом можно сделать destroy мьютекса из другой задачи, не в той в которой он был залочен.
И он разлочится для всех остальных задач. Разница в поведении с семафорами здесь эфемерная.
Так что мьютексам найти достойное применение очень сложно. Я их никогда не использую.
Гораздо удобнее для этого Lightweight Semaphores. Они и быстрее мьютексов создаются, и лочат задачи в два раза быстрее.
Go to the top of the page
 
+Quote Post
Viktuar
сообщение Jun 10 2018, 15:13
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 18-12-16
Пользователь №: 94 676



Цитата(AlexandrY @ Jun 10 2018, 15:27) *
Но при этом можно сделать destroy мьютекса из другой задачи, не в той в которой он был залочен.
И он разлочится для всех остальных задач. Разница в поведении с семафорами здесь эфемерная.
Так что мьютексам найти достойное применение очень сложно. Я их никогда не использую.
Гораздо удобнее для этого Lightweight Semaphores. Они и быстрее мьютексов создаются, и лочат задачи в два раза быстрее.

А как же "priority inheritance" в мьютексах? Его вы тоже не используете?
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 10 2018, 16:04
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(AlexandrY @ Jun 10 2018, 17:27) *
Но при этом можно сделать destroy мьютекса из другой задачи, не в той в которой он был залочен.

Достаю свою "шарманку": если не делать мьютекс глобальным (доступным со "всех щелей"), то такая проблема ему не грозит. Впрочем, как и любому другому "объекту" wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 11 2018, 05:45
Сообщение #13


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Forger @ Jun 10 2018, 19:04) *
Достаю свою "шарманку": если не делать мьютекс глобальным (доступным со "всех щелей"), то такая проблема ему не грозит. Впрочем, как и любому другому "объекту" wink.gif

Это не проблема, а такая фича, которой надо пользоваться раз она есть.
Поэтому все что можно надо делать глобальным, иначе лишаетесь кучи полезных фичей. laughing.gif

Цитата(Viktuar @ Jun 10 2018, 18:13) *
А как же "priority inheritance" в мьютексах? Его вы тоже не используете?

Да не использую.
А вы используете? Расскажите как.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 11 2018, 05:51
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(AlexandrY @ Jun 11 2018, 08:43) *
все что можно надо делать глобальным, иначе лишаетесь кучи полезных фичей

Вы аккуратнее шутите! Все-таки, это - раздел для новичков, и некоторые из них могут воспринять "это" всерьез!







--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 11 2018, 06:02
Сообщение #15


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Forger @ Jun 11 2018, 08:51) *
Вы аккуратнее шутите! Все-таки, это - раздел для новичков, и некоторые из них могут воспринять "это" всерьез!

Дело в том что программирование малых embedded систем - это несколько иная наука чем программирование скажем PC или даже одноплатных компьютеров.
Но это открывается только через достаточно лет практики.
Поэтому я не удивляюсь незнанию вами таких очевидных истин. wink.gif
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016