Niepodzielność jest właściwością stosowane w programowania współbieżnego opisać operację lub zestaw operacji przebiegu programu całkowicie bez przerwane przed zakończeniem kursu. Operacja weryfikująca tę właściwość jest określana jako „ atomowa ”, termin ten pochodzi od ατομος ( atomos ), co oznacza „tego nie można dzielić”.
Pojęcie to odnosi się na przykład do części programu, której proces lub wątek, który nim zarządza, nie zrzeknie się monopolu na określone dane na inny proces przez cały czas trwania tej części. Pojęcie to odnosi się również do transakcji w bazach danych .
Generalnie instrukcje asemblera można traktować jako niepodzielne, ale to nie wystarczy, aby zapewnić spójność danych. Aby to zrobić, należy wdrożyć mechanizmy synchronizacji . W konsekwencji i przez rozszerzenie można powiedzieć, że sekcja chroniona w ten sposób, określana jako sekcja krytyczna chroniona przez wzajemne wykluczenie , jest również atomowa.
Kilka instrukcji używanych w pewnych architekturach równoległych jest atomowych i jest używanych do implementacji synchronizacji lub algorytmów nieblokujących.
Często używamy instrukcji Porównaj i zamień , Pobierz i dodaj lub Testuj i ustaw , a także kilka instrukcji Load-Link / Store-Conditional .
Pamięć transakcyjna jest sposób, aby wykonać serię operacji atomowych: transakcja dokonać kilku zmian, a nie powieść, jeśli niektóre zmienne wykorzystywane były zmieniane. Taki mechanizm stosowany jest w bazach danych w postaci programowej pamięci transakcyjnej .