Samtidig programmering
Teori
Samtidig (concurrent) programmering betyder at forskellige instrukser kan udføres samtidig. Den faktiske rækkefølge (og hvorvidt det bliver udført parallelt) afgøres af bl.a. styresystem og hardware. En populær måde at lave samtidig programmering er ved at bruge flere tråde (multithreading) [1].

En tråd eller eksekveringstråd (engelsk: thread) er en af flere parallelle instruktionssekvenser inden for en proces i en computer i mange operativsystemer. (..) Hver tråd har sit eget selvstændige forløb, men deler som regel hukommelse med øvrige tråde i processen. – Wikipedia
For at designe eller dokumentere programmer med samtidige aktiviteter, kan man gøre brug af et aktivitetsdiagram. Det minder om et rutediagram, men aktiviteter der kan udføres samtidigt markeres med tykke sorte linjer. Se evt. wiki.
Informationsdeling mellem tråde
Risiko i samtidig programmering: Race conditions og data races.
A race condition or race hazard is the condition of an electronics, software, or other system where the system’s substantive behavior is dependent on the sequence or timing of other uncontrollable events. It becomes a bug when one or more of the possible behaviors is undesirable. – Wikipedia
Typiske tilgange i Rust for at undgå sådanne fejl er informationsdeling vha. beskedkanaler (message passing) og brug af atomare datatyper samt Mutex [1] der “låser” adgang til informationen. I Python bruges fx “låse” fra biblioteket threading.
Mutex
Formålet med en Mutex (mutual exclusion) er at sikre at der aldrig er mere end 1 tråd ad gangen der har adgang til bagvedliggende data (også kendt som lås).
For at dele en reference til en Mutex bruges ofte den “atomare udgave” af reference deling (Rc) nemlig Arc. Til at dele data mellem tråden ville man derfor bruge Arc<Mutex<T>> i stedet for Rc<RefCell<T>>.
Atomar operation
Atom betyder oprindeligt “udeleligt” og bruges derfor i programmering til operationer der ikke kan brydes op. I forbindelse med samtidig programmering betyder det at andre dele af programmet ikke kan påvirke en atomar operation.
Atomic Reference Count Arc bruger atomare operationer til at holde styr på antallet af referencer.