Bloķēšanas priekšraksts ņem konkrētā objekta muteksu, izpilda priekšraksta bloku un pēc tam atbrīvo slēdzeni. Turot slēdzeni, pavediens, kas tur slēdzeni, var iegūt un atkal atbrīvot slēdzeni. Jebkurš cits pavediens ir bloķēts no slēdzenes un gaida, līdz slēdzene tiek atbrīvota.
Pārskats:
Izmantojiet bloķēšanas kodu
Līdzvērtīgs
Var domāt, ka Lock pamatā esošo kodu ievieš Monitor.
Tā kā kods izmanto, mēģiniet ... finālsbloks, tāpēc pat tad, ja slēdzenes paziņojuma pamattekstā tiek izmests izņēmums, slēdzene tiek atbrīvota.
Jūs nevarat izmantot gaidīšanas operatora slēdzeni paziņojuma pamattekstā.Jūs to nevarat izmantot paziņojuma pamattekstāgaidītOperatora slēdzene。 Jūs nevarat izmantot gaidīšanas operatora slēdzeni paziņojuma pamattekstā. Jūs nevarat izmantot gaidīšanas operatora slēdzeni paziņojuma pamattekstā. Šis teikums ir ļoti svarīgs!
Dokumentācija:Hipersaites pieteikšanās ir redzama.
Es pats pārbaudu kodu,Izmantojiet uzdevumu, lai iegūtu bloķēšanu, un izmantojiet gaidīt, lai bloķētu, kods ir šāds:
Pēc šāda koda izpildes vairākas reizes izpildes rezultāts nav tāds, kā paredzēts.
Kāpēc? Ja mēģināt izmantot atslēgvārdu await, mēģinot izmantot atslēgvārdu await bloķēšanas blokā, jūs saņemsiet šo kompilācijas kļūdu: nevar gaidīt bloķēšanas paziņojuma pamattekstā. Iemesls ir tāds, ka pēc gaidīšanas pabeigšanas metode var darboties citā pavedienā, nevis pavedienā (izsaukuma pavediens) pirms atslēgvārda await.bloķēšanas atslēgvārdsTas pats pavediensBloķēšanas un atbrīvošanas bloķēšana slēdzenē。 Modificējiet kodu, lai intuitīvāk redzētu iemeslu:
Iegūstiet slēdzenes vītnes ID un slēdzenes atbrīvošanas vītnes ID,Acīmredzot ne uz pavediena, tāpēc slēdzeni nevar veiksmīgi atbrīvot, kā parādīts zemāk redzamajā attēlā:
Mēģināja modificēt kodu, pārbaudīja ar pavedienu, izpildīja vairākas reizes, un tas darbojās, kā paredzēts, kods ir šāds:
(Beigas)
|