Использование внутриатомных атомарных функций вместо семафоров - PullRequest
1 голос
/ 04 июня 2011

Кто-нибудь может объяснить, как можно использовать внутренние атомарные функции в качестве альтернативы семафорам?

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

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

Спасибо, Ивак.

1 Ответ

0 голосов
/ 02 октября 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...