Совместное использование заботу!

Управление целостностью совместно используемой информации в значительной степени зависит от синхронизации процессов. Для решения проблем критических секций доступны как программные, так и аппаратные решения.

С другой стороны, аппаратные решения проблемы критической секции чрезвычайно сложны в реализации. Давайте рассмотрим и сравним Mutex и Semaphore, два прикладных решения для решения проблем критических секций.

Основные выводы

  1. Мьютекс обеспечивает взаимное исключение, позволяя одновременно только одному потоку обращаться к общему ресурсу.
  2. Семафор контролирует доступ к ресурсу, управляя фиксированным количеством разрешений, позволяя нескольким потокам одновременно обращаться к ресурсу.
  3. Мьютексы проще в использовании, а семафоры обеспечивают большую гибкость в управлении доступом к общим ресурсам.

Мьютекс против семафора

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

Мьютекс против семафора

Мьютекс означает объект взаимного исключения. Это тип двоичного семафора, который используется для ограничения доступа к общему ресурсу. Чтобы предотвратить длительную инверсию приоритетов, он имеет механизм наследования приоритетов.

Это позволяет блокировать существующие задания с более высоким приоритетом на минимально возможное время. С другой стороны, наследование приоритета не исправляет инверсию приоритета; скорее, это уменьшает его влияние.

Семафор — это неотрицательная переменная, которая поддерживается между потоками. Семафор — это сигнальный механизм, и другой поток может сигнализировать потоку, ожидающему семафор.

Для синхронизации процессов используются две атомарные процедуры: () wait и () signal. В зависимости от того, как он настроен, семафор либо разрешает, либо запрещает доступ к ресурсу.

Сравнительная таблица

Параметры сравнения Mutexсемафор
МеханизмЭто запирающая система.Это какая-то сигнальная система.
ЦельПоток представлен мьютексом.Процессы представлены семафором.
ПриродаМьютекс является атомарным и сингулярным.Семафор является атомарным по своей природе, но не единичным.
Тип данныхMutex — это не более чем часть программного обеспечения.Семафор — это переменная с целочисленным значением.
ТипMutex не имеет подтипов.Счетные и двоичные семафоры — это два типа семафоров.
МодификацияТолько процесс, который может запросить или освободить ресурс, может изменить его.Семафор можно изменить с помощью функций ожидания и сигнала.

Что такое Мьютекс?

Взаимное исключение — это термин, используемый для описания ситуации. Мьютекс — это краткое название объекта. Из слова взаимное исключение мы можем сделать вывод, что только одна программа в данный момент имеет доступ к определенному ресурсу.

Читайте также:  MVC против MVVM: разница и сравнение

Объект мьютекса позволяет многим потокам приложения обращаться к одному и тому же ресурсу одновременно, только по одному за раз.

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

Затем программа использует ресурс, прежде чем окончательно освободить объект мьютекса. Затем объект мьютекса может быть создан и использован другими программами таким же образом.

Блокируя объект, этот конкретный ресурс назначается этому конкретному процессу, и никакой другой процесс не может его использовать. В результате никаким другим программам не разрешается использовать системные ресурсы в критической области. Таким образом, объект мьютекса можно использовать для выполнения синхронизации процесса.

Мьютекс допускает взаимное исключение, поскольку производитель или потребитель могут иметь ключ (мьютекс) и продолжать работу. Потребитель должен ждать, пока буфер производителя заполнится, и наоборот.

Что такое семафор?

Семафор — это целочисленная переменная S, которая используется для синхронизации процессов и инициализируется количеством ресурсов в системе. Чтобы изменить значение S, он использует две основные функции: wait() и signal().

Обе эти функции используются для изменения значения семафора, но они позволяют делать это только одной программе за раз, поэтому никакие два метода не могут изменить значение семафора одновременно. Счетные семафоры и двоичные семафоры — это два типа семафоров.

Переменная семафора сначала инициализируется количеством доступных ресурсов при подсчете семафоров. Затем метод wait() выполняется каждый раз, когда процессу требуется ресурс, а значение переменной semaphore уменьшается на единицу.

Читайте также:  Синхронизация и резервное копирование: разница и сравнение

Затем процесс использует ресурс, после чего вызывает метод signal(), который увеличивает значение переменной семафора на единицу. Всякий раз, когда значение переменной semaphore достигает 0, то есть когда программа израсходовала все ресурсы, и больше не осталось ни одного для использования,

Затем, если другому процессу потребуется использовать ресурсы, ему придется ждать своего времени. Таким образом мы устанавливаем синхронизацию процессов.

В двоичных семафорах значение переменной семафора равно 0 или 1. Когда процесс хочет использовать ресурс, вызывается метод wait(), и значение семафора изменяется на 0 с 1.

Затем процесс использует ресурс, и после этого вызывается метод signal(), и значение переменной semaphore устанавливается равным 1.

Если значение переменной семафора равно 0 в данный момент времени, и другая программа хочет получить доступ к тому же ресурсу, она должна ждать, пока предыдущая программа освободит ресурсы. Синхронизация процесса может быть выполнена таким образом. Это сравнимо с мьютексом, но ничего не блокирует.

семафор

Основные различия между мьютексом и семафором

  1. Mutex использует механизм блокировки, что означает, что если процессу необходимо использовать ресурс, он должен сначала заблокировать его, использовать, а затем освободить. Semaphore, с другой стороны, использует метод сигнализации, в котором функции wait() и signal() используются для указания того, отдает ли процесс ресурс или потребляет его.
  2. Мьютекс — это объект, тогда как семафор — это переменная с целочисленным значением.
  3. Объект мьютекса требует, чтобы различные потоки процесса одновременно подключались к одному и тому же совместно используемому ресурсу. Семафор, с другой стороны, позволяет нескольким потокам процесса обращаться к конечному экземпляру ресурса до тех пор, пока он не станет доступным.
  4. В мьютексе блокировка может быть получена и снята одним и тем же процессом в одно и то же время. Однако значение переменной семафора может быть изменено любым процессом, которому требуется ресурс, но только один процесс может изменить значение за раз.
  5. Мьютекс позволяет различным программным потокам получать доступ к одному и тому же общему ресурсу, но только по одному за раз, тогда как, с другой стороны, семафор требует, чтобы различные программные потоки одновременно подключали ограниченное количество ресурсов.
Рекомендации
  1. https://dl.acm.org/doi/abs/10.1145/362759.362813
  2. https://lib.hpu.edu.vn/handle/123456789/21469

точка 1
Один запрос?

Я приложил столько усилий, чтобы написать этот пост в блоге, чтобы предоставить вам ценность. Это будет очень полезно для меня, если вы подумаете о том, чтобы поделиться им в социальных сетях или со своими друзьями/родными. ДЕЛИТЬСЯ ♥️

Хотите сохранить эту статью на потом? Нажмите на сердечко в правом нижнем углу, чтобы сохранить в свой собственный блок статей!

By Сандип Бхандари

Сандип Бхандари имеет степень бакалавра вычислительной техники Университета Тапар (2006 г.). Имеет 20-летний опыт работы в сфере технологий. Он проявляет большой интерес к различным техническим областям, включая системы баз данных, компьютерные сети и программирование. Подробнее о нем можно прочитать на его био страница.