Фактическая разница между Mutex и бинарным семафором - PullRequest
0 голосов
/ 11 декабря 2019

Итак, на прошлой неделе я изучал Mutex и семафоры. Я пришел, чтобы найти этот пост , который действительно помог мне понять, что такое семафоры. Теперь, когда я понимаю, какова теоретическая разница между Бинарным Семафором и Мьютексом, я все еще задаюсь вопросом как до на самом деле используют их. В настоящее время я использую C # и не могу найти способ использовать семафор Binary на этом языке.

Может кто-нибудь опубликовать (простой) пример кода о том, как его использовать Двоичный Семафор против Мьютекса? Любой широко используемый язык сделает эту работу. Вы даже можете опубликовать скрипт Powershell / Bash.

1 Ответ

1 голос
/ 12 декабря 2019

Очень грубое приближение: если ваш поток выполнения должен блокироваться, удерживая ресурс (т. Е. Mutex, sem), вы не должны использовать мьютекс. Проблема с этим приближением состоит в том, что блок означает что-то другое в программе UI и обработчике прерываний;блокировка - понятие относительное.

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

Например, поток 1 может получить семафор, поток 2 может ожидать его, а поток 3 может отказаться от него. Это может звучать как хаос, но это может быть основой более сложной системы, где потоки 3 и 1 обмениваются данными с помощью некоторых средств, поэтому поток 1 может передать владение ресурсом непосредственно потоку 3. Это не может быть сделано с мьютексами.

Тем не менее;Я мог бы взломать pthread_mutex_transfer (mutex, pthread) в любую существующую реализацию, прикасаясь носом к пуристам и теоретикам.

...