Я пытаюсь понять атомарные и неатомарные операции. Относительно операционной системы, а также относительно C. Согласно странице википедии здесь
Рассмотрим простой счетчик, который могут увеличиваться разными процессами.
Неатомарно
Наивная, неатомарная реализация:
считывает значение в ячейке памяти;
добавляет единицу к значению;
записывает новое значение обратно в ячейку памяти.
Теперь представьте, что два процесса работают, увеличивая одну общую ячейку памяти:
первый процесс считывает значение в ячейке памяти;
первый процесс добавляет единицу к значению;
но до того, как он сможет записать новое значение обратно в ячейку памяти, оно приостанавливается, и второму процессу разрешается запускаться:
второй процесс считывает значение в ячейке памяти, то же значение, что и первый процесс;
второй процесс добавляет единицу к значение;
второй процесс записывает новое значение в ячейку памяти.
Как можно превратить описанную выше операцию в атоическую операцию. Я понимаю атомарные операции так, что все, что выполняется без прерывания, является атомарным. Так например
int b=1000;
b+=1000;
Должна быть атомарная операция в соответствии с моим пониманием, потому что обе инструкции выполняются без прерывания, однако я узнал от кого-то, что в C нет ничего, известного как атомарная операция, поэтому оба оператора не являются атомарными. Итак, я хочу понять, чем отличается атомарность, когда речь идет о языках программирования от операционных систем?