Другое

Атомарные операции в языке С: определение, суть и функции

Lorem ipsum dolor

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

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

Атомарные операции в С

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

Отличной реализацией атомарной операции является запись данных в массив. Например:

public class CuriousityExample {

    public volatile int[] myarray;

 

    public void nonAtomicExample() {

        myarray = new int[1];

        myarray[0] = 1;

    }

 

    public void probablyAtomicExample() {

        myarray = new int[] { 1 };

    }

}

 

На примере выше видно, что, когда мы используем метод «nonAtomicExample», тогда присутствует вероятность, что поток отправит запрос к «myarray[0]», пока тот не инициализировался; из-за этого может возникнуть непредвиденный результат. Когда мы используем метод «probablyAtomicExample», такого не случится, потому что массив сначала заполняется, а потом уже к нему отправляется запрос. Из-за этого существует определение, что атомарные операции видны всем потокам, которые участвуют в процессе.

Атомарные операции в С и их особенности

Атомарные операции применяются во многих приложениях. Например:

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

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

  3. Многопоточные веб-приложения. В таких приложениях сервер, который разбирает HTTP-запросы, должен разбирать их в атомарном режиме. В другом случае может возникнуть ситуация, когда ряд запросов потеряется. От этого пострадает функциональность приложения.

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

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

Заключение

Атомарные операции в С и других языках программирования всегда соотносились с понятием «неделимости». Так было уже не один десяток лет, однако заговорили об атомарности с развитием многопоточного или параллельного программирования, потому что разработчики стали различать ситуации, когда несколько параллельных потоков взаимодействуют с одними и теми же данными. В результате такого воздействия часть данных видоизменяется, а другая часть окончательно теряется. Чтобы решить такую проблему, было принято решение выделять наиболее важные потоки, которые должны исполняться до конца, невзирая на работу других потоков. Этим и занимаются атомарные операции.

Схожие статьи

Как написать дисклеймер на русском правильно, что это такое: образец
Другое

Как написать дисклеймер на русском правильно, что это такое: образец

CTF-загрузчик или ctfmon.exe: что это за процесс в Windows 10
Другое

CTF-загрузчик или ctfmon.exe: что это за процесс в Windows 10

Что такое передвижение персонажа в Unity 3D и как его реализовать
Другое

Что такое передвижение персонажа в Unity 3D и как его реализовать

Монитор для веб-дизайнера: как выбрать лучшую и недорогую модель?
Другое

Монитор для веб-дизайнера: как выбрать лучшую и недорогую модель?