Атомарная (атом от греч atomos — неделимое) операция


Вопрос по поводу атомарных операций


Download 30.44 Kb.
bet2/4
Sana16.06.2023
Hajmi30.44 Kb.
#1497895
1   2   3   4
Bog'liq
Атомарные операции

Вопрос по поводу атомарных операций...
Берем, допустим, инкремент, выполняется следующее:
1)грузим в регистр значение переменной
2)инкрементируем
3)выгружаем из регистра в память
Если начинаем делать это из разных потоков, то можем старое значение считывать, это понятно...
Однако, с помощью какой магии атомарные типы из разных потоков позволяют такое проворачивать без ошибок? что значит атомарный тип? это свойство определенного типа или это можно гарантировать для любого типа?
Ну и код:
#include
#include
#include
#include
int main()
{
using namespace std::chrono_literals;
//std::atomic i{1};
//std::atomic ii{2};
long long i = 1;
long long ii = 2;


std::thread t1([&](){ i++; i--; ii++; });
std::thread t2([&](){ i++; i--; ii++; });
std::thread t3([&](){ i++; i--; ii++; });
std::thread t4([&](){ i++; i--; ii++; });


t1.join();
t2.join();
t3.join();
t4.join();


std::this_thread::sleep_for(100ms);


std::cout<}
почему что для атомарных типов, что для неатомарных выводится всегда 1 6... не должно же быть такого

Библиотека atomic предоставляет компоненты для "мелкозернистых" атомарных операций, позволяя реализовать конкуррентное программирование, свободное от блокировок. Каждая атомарная операция является неделимой по отношению к любым другим атомарным операциям, использующим одн и тот же объект. Атомарные объекы -- единственные в С++, для которых исключается состояние "гонок", то есть, если один поток пишет в атомарный объект, а другой поток читает из него, поведение обоих четко определено.




Заголовочный файл 


Download 30.44 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling