Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 49134|Odpoveď: 4

[Zdroj] .NET/C# Lock Principle Monitor poskytuje podrobné vysvetlenie

[Kopírovať odkaz]
Zverejnené 29. 4. 2021 9:54:10 | | | |
Príkaz zámku vezme mutex daného objektu, vykoná blok príkazu a potom uvoľní zámok. Pri držaní zámku môže niť, ktorá ho drží, zámok opäť zachytiť a uvoľniť. Akékoľvek iné vlákno je zablokované a čaká, kým sa zámok uvoľní.

Revízia:

.net/c# Užívateľský viacvláknový súbežný zámok (reťazec){...} Podrobné vysvetlenie
https://www.itsvse.com/thread-7764-1-1.html

Použi kód zámku

Ekvivalent

Dá sa predpokladať, že základný kód Locku implementuje Monitor.

Keďže kód používa try... Finalblock, takže aj keď je v tele príkazu zámku vložená výnimka, zámok sa uvoľní.

Nemôžete použiť zámok operátora await v tele výroku.Nemôžete ho použiť v tele vyhláseniapočkajteOperátorský zámok。 Nemôžete použiť zámok operátora await v tele výroku. Nemôžete použiť zámok operátora await v tele výroku. Táto veta je veľmi dôležitá!

Dokumentácia:Prihlásenie na hypertextový odkaz je viditeľné.

Kód testujem sám,Použi Úlohu na získanie zámku a použi čakanie na blokovanie, kód je nasledovný:

Po opakovanom spustení nasledujúceho kódu výsledok vykonania nie je taký, ako sa očakávalo.



Prečo? Ak sa pokúsite použiť kľúčové slovo await pri použití kľúčového slova await v lock blocku, dostanete túto chybu kompilácie: cannot await v tele príkazu lock. Dôvodom je, že po dokončení čakania môže metóda bežať v inom vlákne namiesto vlákna (volajúceho vlákna) pred kľúčovým slovom čakať.lockkeywordRovnaká diskusiaZamkni a uvoľni zámok v zámku
Upravte kód, aby ste pochopili dôvod intuitívnejšie:

Získaj ID závitu zámku a ID závitu uvoľnenia zámku,Samozrejme nie v žiadnej diskusii, takže zámok nemožno úspešne uvoľniť, ako je znázornené na obrázku nižšie:



Skúšal som upraviť kód, testoval som s vláknom, viackrát ho spustil a fungovalo to podľa očakávania, kód je nasledovný:



(Koniec)





Predchádzajúci:(to).NET/C# na zabalenie priečinka do zip súboru
Budúci:Redis používa písmo Lua na podrobné vysvetlenia
 Prenajímateľ| Zverejnené 10. 2. 2022 9:20:09 |

Neuvoľňujte zámok





 Prenajímateľ| Zverejnené 25. 6. 2023 19:57:43 |
Metóda synchronizácie objektov bola volaná z nesynchronizovaného bloku kódu.
Nasledujúci kód spôsobí chybu ako vyššie




 Prenajímateľ| Zverejnené 12. 8. 2023 19:47:49 |
Cukr v syntaxi zámku, ako je uvedené nižšie:






 Prenajímateľ| Zverejnené 11. 7. 2024 10:44:02 |
【Turn】C# viacvláknová súbežnosť pod rôznymi zámkami
https://www.itsvse.com/thread-10561-1-1.html
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com