Lukustuslause võtab antud objekti muteksi, täidab lauseploki ja vabastab luku. Lukku hoides saab luku hoidev niit luku uuesti kätte ja vabastada. Kõik teised lõimed blokeeritakse lukku saamast ja ootavad, kuni lukk avaneb.
Läbivaatamine:
Kasuta lukukoodi
Ekvivalentne
Võib arvata, et Locki aluseks oleva koodi rakendab Monitor.
Kuna kood kasutab proovi... lõplik blokeering, nii et isegi kui lukustuslause kehas on erand, vabastatakse lukk.
Sa ei saa kasutada await operaatori lukustust avalduse põhiosas.Seda ei saa kasutada avalduse põhiosasootaOperaatorilukk。 Sa ei saa kasutada await operaatori lukustust avalduse põhiosas. Sa ei saa kasutada await operaatori lukustust avalduse põhiosas. See lause on väga oluline!
Dokumentatsioon:Hüperlingi sisselogimine on nähtav.
Testin koodi ise,Kasuta Taski lukustamiseks ja oota blokeerimiseks, kood on järgmine:
Pärast järgmise koodi mitmekordset käivitamist ei ole täitmise tulemus ootuspärane.
Miks? Kui proovite kasutada await märksõna lukustusplokis, saad selle kompileerimisvea: cannot await lukustuslause kehas kasutada. Põhjus on selles, et pärast ootamise lõpetamist võib meetod töötada teises lõimes, mitte lõimes (kutsub lõime) enne await märksõna.lockkeywordSama teemaLukusta ja vabasta lukk lukku。 Muuda koodi, et näha põhjust intuitiivsemalt:
Võta luku keerme ID ja luku vabastaja keerme ID,Ilmselgelt mitte mingil teemal, seega ei saa lukku edukalt vabastada, nagu alloleval joonisel näidatud:
Proovisin koodi muuta, testisin lõimega, käivitasin mitu korda ja see töötas ootuspäraselt, kood on järgmine:
(Lõpp)
|