Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 49134|Atbildi: 4

[Avots] .NET/C# bloķēšanas principa pārraugs sniedz padziļinātu skaidrojumu

[Kopēt saiti]
Publicēts 29.04.2021 09:54:10 | | | |
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:

.net/c# Lietotāja daudzpavedienu vienlaicīga bloķēšana (virkne){...} Detalizēts skaidrojums
https://www.itsvse.com/thread-7764-1-1.html

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)





Iepriekšējo:(uz).NET/C#, lai mapi iepakotu zip failā
Nākamo:Redis detalizētiem skaidrojumiem izmanto Lua skriptus
 Saimnieks| Publicēts 10.02.2022 09:20:09 |

Neatlaidiet slēdzeni





 Saimnieks| Publicēts 25.06.2023 19:57:43 |
Objekta sinhronizācijas metode tika izsaukta no nesinhronizēta koda bloka.
Šāds kods radīs kļūdu, kā norādīts iepriekš




 Saimnieks| Publicēts 12.08.2023 19:47:49 |
bloķēšanas sintakses cukurs, kā parādīts zemāk:






 Saimnieks| Publicēts 11.07.2024 10:44:02 |
【Pagriezt】 C# vairāku pavedienu vienlaicīgums zem dažādām slēdzenēm
https://www.itsvse.com/thread-10561-1-1.html
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com