Zaporni ukaz vzame mutex določenega objekta, izvede blok ukaza in nato sprosti zaklep. Ko držite ključavnico, lahko nit, ki drži ključavnico, ponovno zagrabi in sprosti ključavnico. Vsaka druga nit je blokirana, da ne dobi ključavnice, in čaka, da se ključavnica sprosti.
Pregled:
Uporabi kodo za ključavnico
Ekvivalent
Lahko se domneva, da je osnovna koda Lock implementirana v Monitorju.
Ker koda uporablja poskus... Finalblock, tako da tudi če je izjema vržena v telo zaklepa, je zaklep sproščen.
V telesu stavka ne morete uporabiti zaklepa await operator.Ne morete ga uporabiti v besedilu izjavepočakajOperator lock。 V telesu stavka ne morete uporabiti zaklepa await operator. V telesu stavka ne morete uporabiti zaklepa await operator. Ta stavek je zelo pomemben!
Dokumentacija:Prijava do hiperpovezave je vidna.
Kodo preizkusim sam,Uporabi Nalogo za zaklepanje in počakaj za blokiranje, koda je naslednja:
Po večkratnem izvajanju naslednje kode rezultat izvajanja ni takšen, kot je bilo pričakovano.
Zakaj? Če poskušate uporabiti ključno besedo 'čakaj' pri uporabi ključne besede 'čakaj' v bloku zaklepa, boste dobili to napako pri prevajanju: ne moremo počakati v telesu stavka zaklepa. Razlog je, da se po zaključku čakanja metoda lahko izvaja v drugi niti namesto v niti (klic niti) pred ključno besedo čakaj.lockkeywordIsta temaZakleni in sprosti zaklep v ključavnici。 Spremenite kodo, da boste razlog videli bolj intuitivno:
Pridobi nit id ključavnice in nit sprostitve ključavnice,Seveda ne na temi, zato zaklepa ni mogoče uspešno sprostiti, kot je prikazano na spodnji sliki:
Poskusil sem spremeniti kodo, testiral z nitjo, večkrat izvedel in je delovalo kot pričakovano, koda je naslednja:
(Konec)
|