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

Näkymä: 20027|Vastaus: 0

[Lähde] C#-lukitusavainsana merkitsee lauselohkon kriittiseksi alueeksi hankkimalla mutexin tietylle objektille ja suorittamalla lauseen, mutta...

[Kopioi linkki]
Julkaistu 31.12.2015 17.51.01 | | |
Lukkoavainsana merkitsee lauselohkon kriittiseksi vyöhykkeeksi ottamalla mutex annetulle objektille, suorittamalla lauseen ja vapauttamalla lukon.

Lukituslause käyttää käytännössä Monitor.Enteriä ja Monitor.Exitiä, eli Monitor.Enter(tämä) suoritetaan, kun lock(this) suoritetaan, ja Monitor.Exit(tämä) suoritetaan curly-tukikohdan lopussa. Mitä se tarkoittaa mille tahansa objektille, muistin ensimmäinen osa on kaikkien metodien osoite ja toinen osa on indeksi. Hän osoittaa SyncBlockin CLR:n SyncBlock-välimuistialueella. Mitä se tarkoittaa? Eli kun suoritat Monitor.Enter(Object) -toiminnon, jos objektin indeksiarvo on negatiivinen, valitse SyncBlock SyncBlock-välimuistista ja aseta sen osoite objektin indeksiin. Tämä täydentää objektilla merkityn lukon, ja muut säikeet haluavat suorittaa Monitor.Enter(object)-operaation uudelleen, joka saa indeksin positiivisella objektilla ja odottaa. Kunnes indeksi muuttuu negatiiviseksi, eli säie käyttää Monitor.Exit(objektia) muuttaakseen indeksin negatiiviseksi.

Mitä sinun tulee kiinnittää huomiota lukkoa käyttäessäsi:
1.lock ei voi lukita null-arvoa Objekti voi osoittaa nollaan, mutta nullia ei tarvitse vapauttaa. (Katso myös: Täysi nollan ymmärtäminen)
2.lock ei voi lukita merkkijonotyyppiä, vaikka se on myös referenssityyppi. Koska merkkijonon tyyppi on "leijutettu" CLR:n toimesta
Tämä tarkoittaa, että koko ohjelmassa on vain yksi instanssi mistä tahansa merkkijonosta, ja sama objekti edustaa kyseistä tekstiä kaikissa käynnissä olevien sovellusalueiden säikeissä. Siksi, kunhan lukitus asetetaan saman sisällön merkkijonoon missä tahansa sovellusprosessissa, kaikki kyseisen merkkijonon instanssit sovelluksessa lukitaan. Siksi on parasta lukita yksityiset tai suojatut jäsenet, joita ei pidetä.
3.locklock Objekti on ohjelmalohkon muistiraja
4. Arvotyyppiä ei voi lukita, koska edellisessä tekstissä "objekti vapautetaan" punaisella ja arvotyyppi ei ole viitetyyppi
5.Lock välttää julkisten tyyppien tai ohjelman hallitsemattomien objektien lukitsemisen.
Esimerkiksi, jos instanssi on julkisesti saatavilla, lock(this) voi olla ongelmallinen, koska hallitsematon koodi voi myös lukita objektin. Tämä voi johtaa kuolleisiin tilanteisiin, joissa kaksi tai useampi säie odottaa vapauttavansa saman objektin. Julkisten tietotyyppien lukitseminen (toisin kuin olioiden) voi aiheuttaa ongelmia samasta syystä.
Kun käytetään lock(this):ta, luokkajäsenmuuttujan arvoa voidaan muuttaa menetelmällä, joka ei ole kriittisellä vyöhykkeellä

Sovellusskenaario: Sitä käytetään usein estämään epävarmat poikkeukset julkisten muuttujien arvossa, jotka johtuvat monisäikeisten operaatioiden aiheuttamista toimintojen turvallisuuden varmistamiseksi









Edellinen:Win8 käynnistää SQL Server 2012 -palvelun
Seuraava:[Nopeus] IP-segmentin avoimen portin skanneri nopeaan skannatusnopeuteen!!
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