Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

В чем отличие мьютекса от семафоров?

Аленка )))) Знаток (451), закрыт 9 лет назад
Лучший ответ
Panic Doctor Просветленный (43441) 9 лет назад
мьютекс можно одновременно захватить один раз, семафор – несколько
Аленка ))))Знаток (451) 9 лет назад
Это как?
Panic Doctor Просветленный (43441) допустим тебе нужно обеспечить монопольный доступ к ресурсу. для этого используется мьютекс, так как мьютекс это "взаимное исключение". представь ситуацию: есть структура данных, в которой нужно обновить несколько полей, а перед этим нужно сравнить поля, например, с нулем. к этой структуре могут обратиться несколько потоков исполнения. для обеспечения синхронизации и защиты данных можно использовать мьютекс. псевдокод
Аленка ))))Знаток (451) 9 лет назад
Получает мьютекс защищает данные одного потока от других?

А семафор получается позволяет работать нескольким потокам одновременно? Но как же критические секции? Они ведь не позволяют работать там нескольким процессам.

Тогда как работает мьютекс, если нет счетчика?
Panic Doctor Просветленный (43441) у мьютекса считчик устанавливается в 1 и это означает, что мьютекс открыт, т. е. никем не захвачен. когда вызывается mute_lock() счетчик атомарно считывается и уменьшается на 1 и становится 0. когда другой поток попытается вызвать mutex_lock(), он обнаружит, что счетчик равен 0 и будет ждать. для семафоров счетчик может быть установлен в произвольное натуральное число. это позволит работать в критической секции сразу нескольким потокам. критические секции определяются программистом. иногда вообще можно избежать блокирования данных
Остальные ответы
Alexey N Просветленный (34811) 9 лет назад
Если мне память не изменяет, мутекс, это семафор со счетчиком блокировок равным 1. А семафор может быть со счетчиком не равным 1 (а к примеру 5).
Аленка ))))Знаток (451) 9 лет назад
Спасибо:)
Я просто хочу глубже понять отличия.
Похожие вопросы