ScholarGate
Ассистент

Синхронизация и отсутствие гонок данных

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

Найти тему в PaperMindСкороFind papers & topics
Tools & resources
Скачать слайды
Learn & explore
ВидеоСкоро

Definition

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

Scope

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

Core questions

  • Как достигается взаимное исключение и каковы его опасности (взаимоблокировка, голодание)?
  • Что отличает синхронизацию на основе блокировок от синхронизации без блокировок?
  • Как отношение happens-before определяет гонки данных?
  • Как можно автоматически обнаруживать гонки данных?

Key theories

Взаимное исключение
Решение Дейкстры проблемы параллельного управления установило взаимное исключение как фундаментальное требование синхронизации, гарантирующее, что критические секции не выполняются одновременно.
Транзакционная память
Херлихи и Мосс предложили транзакционную память, в которой группы операций с памятью выполняются атомарно, предлагая компонуемую альтернативу мелкозернистой блокировке для создания параллельных структур данных.
Happens-before и динамическое обнаружение гонок
Основываясь на отношении happens-before Лэмпорта, детектор Eraser показал, как динамически находить гонки данных путем проверки дисциплины блокировки, что является примером автоматического обнаружения гонок.

Clinical relevance

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

History

Решение Дейкстры 1965 года для взаимного исключения и его последующие семафоры заложили основы синхронизации, за которыми последовали мониторы Хоара и Бринча Хансена. Отношение happens-before Лэмпорта 1978 года лежит в основе современных определений гонок; Херлихи и Мосс представили транзакционную память в 1993 году, а динамические детекторы гонок, такие как Eraser (1997) и более поздние инструменты на основе happens-before, стали стандартом для отладки параллелизма.

Debates

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

Key figures

  • Edsger Dijkstra
  • Leslie Lamport
  • Maurice Herlihy
  • C. A. R. Hoare
  • Stefan Savage

Related topics

Seminal works

  • dijkstra1965
  • herlihy1993
  • savage1997
  • lamport1978

Frequently asked questions

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

Methods for this concept

Related concepts