Pokud je váš kód v procesu, který má více vláken běžících současně, může být běžící současně. Pokud je výsledek každého běhu stejný jako výsledek jednoho vlákna a hodnoty ostatních proměnných jsou stejné jako očekávané, je to vlákno bezpečné. Jinými slovy, rozhraní poskytované třídou nebo programem je atomické pro vlákna, nebo přepínání mezi více vlákny nevede k nejednoznačnosti ve výsledku spuštění rozhraní, což znamená, že není třeba uvažovat o synchronizaci. Problémy s bezpečností vláken jsou způsobeny jak globálními, tak statickými proměnnými. Pokud má každé vlákno pouze operace čtení globálních a statických proměnných, ale žádné zápisové operace, obecně je tato globální proměnná bezpečná pro vlákna; Pokud více vláken provádí čtení a zápis na proměnnou současně, je obvykle nutná synchronizace vláken, jinak může ovlivnit bezpečnost vláken.
Účelem zámku je zabránit souběžným operacím při vícevláknovém provádění a objekty referenčního typu zámku umožňují současně v jeho uzamčené oblasti pracovat pouze jedno vlákno.
Zámek může uzamknout pouze jednu proměnnou referenčního typu, tedy uzamknout adresu
Existuje rozdíl mezi výsledky běhu s a bez zámku:
Po uzamčení: hodnota i se bude snižovat jeden po druhém, nebudou žádné skoky, žádný opakovaný výstup, dokud hodnota 0 nedosáhne;
Žádný zámek: výstup hodnoty i bude skákat, nespojitý pokles a může mít také výstup -1;
Důvod: Po přidání zámku může kód v zamčené oblasti vykonat pouze jedno vlákno a obě vlákna se spouštějí v pořadí, takže výstup není přerušen. |