Рубрики

G-Fact 15

Атомная операция

Что такое атомная операция? Идея атомарной работы помогает понять повторяемость, критическую секцию, безопасность потоков, примитивы синхронизации и т. Д. (У нас будут предстоящие статьи по каждому).

Атомность, Атомная операция :

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

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

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

подсчитывать ++; // count имеет постоянную память в RAM

Вышеупомянутое утверждение может быть разложено по крайней мере на три операции.

  1. Выборка значения счетчика
  2. Увеличение значения счетчика
  3. Хранение обновленного значения

Если поток, выполняющий функцию, содержащую вышеприведенный оператор, извлекает свое значение (скажем, 2). Возможно, что в этой точке выполнения поток может быть прерван, и другой поток может вызвать ту же функцию. Следовательно, значение count будет увеличено до 3 этим потоком. Когда предыдущий поток возобновляется, он по-прежнему сохраняет предыдущее значение (2) вместо последнего значения (3) и в конечном итоге возвращает обратно 3. Infact, значение count должно быть 4 из-за влияния обоих потоков.

Такие ошибки довольно сложно воссоздать и найти.

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

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

Рекомендуемые посты:

G-Fact 15

0.00 (0%) 0 votes