Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Проблема ABA - Обходные решения15 июня 2011Оглавление: 1. Проблема ABA 2. Пример 3. Обходные решения Обычное обходное решение это добавить дополнительные биты «метки» в проверяемое значение. Например, алгоритм, использующий compare-and-swap над указателями может использовать младшие биты адреса для проверки, сколько раз указатель был изменён. Из-за этого следующий compare-and-swap не сработает, поскольку биты меток не совпадут. Это не решает проблему полностью, но помогает избежать её. Некоторые архитектуры предоставляют двухсловный compare-and-swap, что позволяет сделать большую метку. Обычно это называется ABA', потому что второе значение A слегка отличается от первого. Правильный, но дорогой подход состоит в использовании промежуточных узлов, которые не являются пользовательскими данными, а обеспечивают инвариантность операций добавления и удаления.. Другой подход использовать один или несколько hazard pointer-ов, указателей, которые в принципе не могут появиться в структуре данных. Каждый hazard pointer обозначает промежуточное состояние структуры в процессе изменения; наличие указателей требует дальнейшей синхронизации. Некоторые архитектуры предоставляют «укрупнённые» атомарные операции, благодаря чему, например, можно атомарно изменять сразу обе ссылки вперёд и назад в двусвязном списке. Некоторые архитектуры предоставляют инструкцию load linked, store conditional в которой запись в ячейку возможна, только если не было других записей в указанную ячейку. Это эффективно отделяет признаки «ячейка содержит значение» от «ячейка была изменена». Примеры архитектур DEC Alpha и PowerPC. Просмотров: 2635
|