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

Anonim

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

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

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

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

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

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

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

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

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

Резюме:

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

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

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