Интернет магазин китайских планшетных компьютеров



Компьютеры - Неблокирующая синхронизация

22 января 2011


Оглавление:
1. Неблокирующая синхронизация
2. Реализация
3. Без ожиданий



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

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

Обоснование

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

Приостановка потока нежелательна по многим причинам. Очевидно, что во время ожидания блокировки поток не может выполнять свою работу. Если заблокированный поток выполняет высокоприоритетную задачу или задачу реального времени, такой поток блокировать весьма нежелательно. Другая проблема менее очевидна: определенное взаимное влияние блокировок может приводить к ошибкам, таким как взаимная блокировка, зацикливание, инверсия приоритета.

Главнейшая причина использования lock-free структур данных: обычные примитивы сигнализации либо сами есть спинлоки, либо требуют захвата спинлока в ядре, защищающего списки потоков по приоритетам и списки потоков, ожидающих на объектах.

Таким образом, ни один классический примитив синхронизации не может быть быстрее, чем спинлок.

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

Как правило, lock-free объекты используют атомарные операции, реализованные в системе команд процессора.



Просмотров: 1470


<<< Мьютекс
Семафор (информатика) >>>