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



Компьютеры - Проблема ABA

15 июня 2011


Оглавление:
1. Проблема ABA
2. Пример
3. Обходные решения



В многозадачных вычислениях, проблема ABA возникает при синхронизации, когда ячейка памяти читается дважды, оба раза прочитано одинаковое значение, и признак «значение одинаковое» трактуется как «ничего не менялось». Однако, другой поток может выполниться между этими двумя чтениями, поменять значение, сделать что-нибудь ещё, и восстановить старое значение. Таким образом, первый поток обманется, считая, что не поменялось ничего, хотя второй поток уже разрушил это предположение.

Проблема ABA возникает, когда множество потоков обращаются к разделяемой памяти поочерёдно. Вот пример последовательности событий, ведущих к проблеме ABA:

  • Процесс P1 читает значение A из разделяемой памяти,
  • P1 вытесняется, позволяя выполняться P2,
  • P2 меняет значение A на B и обратно на A перед вытеснением,
  • P1 возобновляет работу, видит, что значение не изменилось, и продолжает…

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

Обычно, с проблемой ABA сталкиваются при реализации lock-free структур и алгоритмов. Если из списка удалить элемент, уничтожить его, а затем создать новый элемент и добавить обратно в список, есть вероятность, что новый элемент будет размещён на месте старого. Указатель на новый элемент совпадёт с указателем на старый, что и приведёт к проблеме: равенство признаков не есть равенство данных целиком.



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


<<< SIGXFSZ
Rundown protection >>>