Tämä artikkeli käsittelee Atomisuus (ohjelmointi):tä, aihetta, joka on herättänyt useiden ihmisten huomion ja kiinnostuksen viime vuosina. Atomisuus (ohjelmointi):stä on tullut ajankohtainen aihe nyky-yhteiskunnassa, koska se vaikuttaa eri aloilla, kuten kulttuurissa, politiikassa ja taloudessa. Tämän artikkelin aikana tutkitaan Atomisuus (ohjelmointi):een liittyviä eri näkökohtia, analysoidaan sen syitä, seurauksia ja mahdollisia ratkaisuja. Tarkastellaan Atomisuus (ohjelmointi):n historiallista kehitystä sekä sen vaikutusta nyky-yhteiskuntaan. Samoin esitellään erilaisia näkökulmia ja lähestymistapoja Atomisuus (ohjelmointi):een, tavoitteena tarjota kattava ja rikastuttava näkemys tästä yleistä kiinnostavasta aiheesta.
Atomisuus (linearisointi) on tietotekniikassa eheystila.[1] Atomisuus ohjelmointikielissä tarkoittaa muuttujaa tai arvoa, joka ei ole pilkottavissa. Yksittäinen numeroarvo on atominen kun taas joukko numeroita ei ole.
Atomiset operaatiot eivät ole myöskään keskeytettäviä.[2]
Käsitteellä on merkitys esimerkiksi rinnakkaisuuden käsittelyssä ja operaatioiden synkronisaatiossa: kirjallisuudessa termi "atomisuus" on toisinaan rajoitettu koskemaan rekistereitä, mutta sitä voidaan laajentaa rinnakkain käsiteltäviin objekteihin.[1]
Eräät ohjelmointikielet määrittelevät atomisia tietotyyppejä ja toimintoja niiden käsittelyyn kuten C99 ja C++11 standardiversiot.
Tyypillisesti tietokoneen suoritin tai väylä voi siirtää tietoa pienissä erissä, jolloin useamman tavun kattava muuttuja ei ole täysin valmis. Esimerkiksi kahden tavun kokoisessa muuttujassa ensimmäinen tavu voi olla päivitetty uudempaan ja toinen tavu on vielä sen vanha arvo. Mikäli siirron synkronointia ei ole käytetty oikein rinnakkainen säie tai toinen suoritin voi lukea virheellisen arvon kun kirjoitus on vielä kesken. Myös välimuistin rakenne voi vaikuttaa miten synkronointi tehdään jotta eri suorittimilla on yhtenäinen arvo.
Esimerkki epäatomisesta toiminnosta on 64-bittisen kokonaisluvun käsittely 32-bittisellä suorittimella, joka käyttää useita konekielisiä komentoja toiminnon suorittamiseen.[3]
Suorittimissa voi olla atomisuutta tukevia käskyjä, joilla ohjelmistotason synkronointiprimitiivit kuten semaforit voidaan myös toteuttaa. Suorittimissa on arkkitehtuurista riippuen eri menetelmiä synkronisointitukeen:[4]
Laitteistotason protokollat välimuistin yhtenäisyydelle voivat lisätä oman tukensa atomisuuden toteuttamiselle.
Rinnakkaisohjelmoinnissa toiminnoista käytetään termejä lineaarisaatio, jakamaton, keskeyttämätön.
Atomisien operaatioiden käyttö perinteisten poissulkemisen (mutex) ja lukituksen sijaan voi antaa merkittävän parannuksen suorituskyvylle.[5] Tehokkaiden lukottomien ratkaisujen toteuttaminen vaatii kuitenkin merkittävää panostusta kehitykseen.[6]