Ak je váš kód v procese, ktorý má viacero vlákien bežiacich súčasne, môže bežať kód súčasne. Ak je výsledok každého behu rovnaký ako výsledok jedného vlákna a hodnoty ostatných premenných sú rovnaké ako očakávané, je to bezpečné pre vlákno. Inými slovami, rozhranie poskytované triedou alebo programom je atómové pre vlákna a prepínanie medzi viacerými vláknami nevedie k nejasnostiam vo výsledku vykonávania rozhrania, čo znamená, že nemusíme uvažovať o synchronizácii. Problémy s bezpečnosťou vlákien spôsobujú globálne aj statické premenné. Ak má každé vlákno iba operácie čítania pre globálne a statické premenné, ale žiadne operácie zápisu, vo všeobecnosti je táto globálna premenná bezpečná pre vlákna; Ak viacero vlákien vykonáva čítanie a zápis na premennú súčasne, zvyčajne je potrebná synchronizácia vlákien, inak môže ovplyvniť bezpečnosť vlákien.
Účelom zámku je zabrániť súbežným operáciám pri viacvláknovom vykonávaní a objekty referenčného typu zámku umožňujú v uzamknutej oblasti pracovať naraz len jedno vlákno.
Zámok môže zamknúť iba jednu referenčnú typovú premennú, teda zablokovať adresu
Existuje rozdiel medzi výsledkami behu s a bez zámku:
Po uzamknutí: hodnota i klesá jeden po druhom, nebudú žiadne skoky, žiadny opakovaný výstup, až kým hodnota 0 nedosiahne;
Žiadny zámok: výstup hodnoty i skočí, nespojitý klesá a môže mať aj výstup -1;
Dôvod: Po pridaní zámku môže kód v uzamknutej oblasti vykonávať naraz len jedno vlákno a obe vlákna sa vykonávajú v poradí, takže výstup nebude prerušovaný. |