Hvis koden din er i en prosess som har flere tråder som kjører samtidig, kan det hende den kjører koden samtidig. Hvis resultatet av hver kjøring er det samme som for en enkelt tråd, og verdiene til andre variabler er de samme som forventet, er det trådsikkert. Med andre ord er grensesnittet som tilbys av en klasse eller et program atomisk for tråder, eller å bytte mellom flere tråder fører ikke til tvetydighet i utførelsesresultatet av grensesnittet, noe som betyr at vi ikke trenger å vurdere synkronisering. Trådsikkerhetsproblemer skyldes både globale og statiske variabler. Hvis hver tråd kun har leseoperasjoner for globale og statiske variabler, men ingen skriveoperasjoner, er denne globale variabelen generelt trådsikker; Hvis flere tråder utfører lese- og skriveoperasjoner på en variabel samtidig, kreves det vanligvis trådsynkronisering, ellers kan det påvirke trådsikkerheten.
Formålet med låsen er å forhindre samtidige operasjoner ved multitrådet utførelse, og objekter av referansetypen lås tillater kun én tråd å operere om gangen i sitt låste område.
Lock kan bare låse én referansetypevariabel, det vil si låse en adresse
Det er en forskjell mellom resultatene av å kjøre med og uten låsing:
Etter låsing: verdien av i vil synke én etter én, det vil ikke være noen hopp, ingen gjentatte utdata, før verdien 0;
Ingen lås: verdien av i vil hoppe, være diskontinuerlig avtagende, og kan også ha en -1 utdata;
Årsak: Etter å ha lagt til en lås, kan bare én tråd kjøre koden i det låste området om gangen, og begge trådene kjøres i rekkefølge, så det vil ikke være avbrutt utdata. |