Lukituslauseke ottaa tietyn objektin muteksin, suorittaa lauseblokin ja vapauttaa lukon. Kun lukkoa pidetään kiinni, lukkoa pitävä lanka voi saada ja vapauttaa lukon uudelleen. Kaikki muut säikeet estetään lukon saamisen ja odottaa, kunnes lukko vapautuu.
Arvostelu:
Käytä lukkokoodia
Ekvivalentti
Voidaan ajatella, että Lockin taustalla oleva koodi on toteutettu Monitorilla.
Koska koodi käyttää yrittää... Finalblock, joten vaikka lukituslauseen runkoon heitettäisiin poikkeus, lukko vapautetaan.
Et voi käyttää odotusoperaattorin lukkoa lausunnon rungossa.Et voi käyttää sitä lauseen rungossaodotaOperaattorilukko。 Et voi käyttää odotusoperaattorin lukkoa lausunnon rungossa. Et voi käyttää odotusoperaattorin lukkoa lausunnon rungossa. Tämä lause on todella tärkeä!
Dokumentaatio:Hyperlinkin kirjautuminen on näkyvissä.
Testaan koodin itse,Käytä Tehtävää saadaksesi lukon ja käytä odotusta blokkaukseen, koodi on seuraava:
Kun seuraava koodi on suoritettu useaan kertaan, suoritustulos ei ole odotettu.
Miksi? Jos yrität käyttää await-avainsanaa käyttäessäsi await-avainsanaa lukituslohkossa, saat tämän käännösvirheen: ei voi odottaa lukituslauseen rungossa. Syynä on se, että odotuksen jälkeen metodi voi suorittaa eri säikeessä sen sijaan, että se olisi säikeessä (kutsuva säie) ennen odotussanaa.lukkoavainsanaSama ketjuHanki lukko ja vapauta lukko。 Muokkaa koodia, jotta syy näkee intuitiivisemmin:
Hanki lukon kierteen ID ja lukon vapautuksen kierteen tunniste,Ei tietenkään ketjussa, joten lukkoa ei voida vapauttaa onnistuneesti, kuten alla olevassa kuvassa näkyy:
Yritin muokata koodia, testasin säikeellä, suoritin useita kertoja, ja se toimi odotetusti, koodi on seuraava:
(Loppu)
|