Другое

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

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-запросы, должен разбирать их в атомарном режиме. В другом случае может возникнуть ситуация, когда ряд запросов потеряется. От этого пострадает функциональность приложения.

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

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

Заключение

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

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

Scrum: революционный метод управления проектами – обзор метода и книга
Другое

Scrum: революционный метод управления проектами – обзор метода и книга

Интерфейс Adfox: первое знакомство с возможностями интерфейса
Другое

Интерфейс Adfox: первое знакомство с возможностями интерфейса

Интересные функции и возможности CSS и CSS3: полезные советы и секреты
Другое

Интересные функции и возможности CSS и CSS3: полезные советы и секреты

Общие принципы разработки ПО и их основоположники. Коротко о главном
Другое

Общие принципы разработки ПО и их основоположники. Коротко о главном