Разница между мьютексом и семафором

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

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

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

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

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

Таким образом, мьютекс можно рассматривать как семафор со значением один.

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

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

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

Резюме:

1. Mutex обычно используется для сериализации доступа к общему ресурсу, в то время как семафор представляет собой несколько одновременных обращений..

2. Мьютекс похож на семафор со счетом один.
3. Mutex позволяет только одному потоку иметь доступ, в то время как семафоры могут одновременно сигнализироваться любым потоком или процессом.

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