Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 49134|Vastaus: 4

[Lähde] .NET/C# Lock Principle Monitor tarjoaa perusteellisen selityksen

[Kopioi linkki]
Julkaistu 29.4.2021 9.54.10 | | | |
Lukituslauseke ottaa tietyn objektin muteksin, suorittaa lauseblokin ja vapauttaa lukon. Kun lukkoa pidetään kiinni, lukkoa pitävä lanka voi saada ja vapauttaa lukon uudelleen. Kaikki muut säikeet estetään lukon saamisen ja odottaa, kunnes lukko vapautuu.

Arvostelu:

.net/c# Käyttäjä monisäikeinen rinnakkaisluku (merkkijono){...} Yksityiskohtainen selitys
https://www.itsvse.com/thread-7764-1-1.html

Käytä lukkokoodia

Ekvivalentti

Voidaan ajatella, että Lockin taustalla oleva koodi on toteutettu Monitorilla.

Koska koodi käyttää yrittää... Finalblock, joten vaikka lukituslauseen runkoon heitettäisiin poikkeus, lukko vapautetaan.

Et voi käyttää odotusoperaattorin lukkoa lausunnon rungossa.Et voi käyttää sitä lauseen rungossaodotaOperaattorilukko。 Et voi käyttää odotusoperaattorin lukkoa lausunnon rungossa. Et voi käyttää odotusoperaattorin lukkoa lausunnon rungossa. Tämä lause on todella tärkeä!

Dokumentaatio:Hyperlinkin kirjautuminen on näkyvissä.

Testaan koodin itse,Käytä Tehtävää saadaksesi lukon ja käytä odotusta blokkaukseen, koodi on seuraava:

Kun seuraava koodi on suoritettu useaan kertaan, suoritustulos ei ole odotettu.



Miksi? Jos yrität käyttää await-avainsanaa käyttäessäsi await-avainsanaa lukituslohkossa, saat tämän käännösvirheen: ei voi odottaa lukituslauseen rungossa. Syynä on se, että odotuksen jälkeen metodi voi suorittaa eri säikeessä sen sijaan, että se olisi säikeessä (kutsuva säie) ennen odotussanaa.lukkoavainsanaSama ketjuHanki lukko ja vapauta lukko
Muokkaa koodia, jotta syy näkee intuitiivisemmin:

Hanki lukon kierteen ID ja lukon vapautuksen kierteen tunniste,Ei tietenkään ketjussa, joten lukkoa ei voida vapauttaa onnistuneesti, kuten alla olevassa kuvassa näkyy:



Yritin muokata koodia, testasin säikeellä, suoritin useita kertoja, ja se toimi odotetusti, koodi on seuraava:



(Loppu)





Edellinen:(to).NET/C# paketoidakseen kansion zip-tiedostoksi
Seuraava:Redis käyttää Lua-skriptejä yksityiskohtaisiin selityksiin
 Vuokraisäntä| Julkaistu 10.2.2022 9.20.09 |

Älä avaa lukkoa





 Vuokraisäntä| Julkaistu 25.6.2023 19.57.43 |
Objektien synkronointimenetelmä kutsuttiin synkronoimattomasta koodilohkosta.
Seuraava koodi antaa virheen kuten yllä




 Vuokraisäntä| Julkaistu 12.8.2023 19.47.49 |
Lock syntax sugar, kuten alla on esitetty:






 Vuokraisäntä| Julkaistu 11.7.2024 10.44.02 |
【Turn】C# monisäikeinen rinnakkaistus eri lukkojen alla
https://www.itsvse.com/thread-10561-1-1.html
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com