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

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

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

Видео: Разница между семафором и мьютексом
Видео: ЧТО ТАКОЕ ПОТОК? [МЬЮТЕКС, СЕМАФОР] 2024, Ноябрь
Anonim

Семафор против Mutex

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

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

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

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

При запуске компьютерного приложения оно создает мьютекс и прикрепляет его к ресурсу. Когда ресурс используется потоком, он блокируется, и другие потоки не могут его использовать. Если другой поток захочет использовать тот же ресурс, ему придется сделать запрос. Затем этот поток будет помещен в очередь до тех пор, пока первый поток не закончит работу с ресурсом. Когда первый поток завершит работу с ресурсом, блокировка будет снята, и поток, ожидающий в очереди, сможет получить доступ к ресурсу. Если в очереди ожидают несколько потоков, им предоставляется доступ поочередно. На практике, когда мьютекс чередует доступ к ресурсу между несколькими потоками, это будет видно, поскольку несколько потоков одновременно потребляют ресурс. Но внутренне только один поток обращается к ресурсу в данный момент времени.

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

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

Рекомендуемые: