Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 18907|Svare: 0

[Kilde] låse Hvorfor kan bare låse referansen, men ikke verditypen

[Kopier lenke]
Publisert på 08.12.2016 10:43:37 | | |

Hvis du gir en verditype, vil den bli bokset, og neste gang koden kjører her, vil den bli bokset igjen, og det vil ikke være det samme objektet to ganger, så det kan ikke låses



lock(x)
{
  ...
}

Låsen gjøres faktisk gjennom Monitor-objektet:

Ovenstående tilsvarer:

System.Objekt obj = (System.Objekt)x;
System.Threading.Monitor.Enter(obj);
Prøv
{
  ...   
}
endelig
{
  System.Threading.Monitor.Exit(obj);
}

Så for å sitere de opprinnelige ordene fra MSDN:
Bruk Monitor for å låse objekter (altså referansetyper), ikke verdityper. Når du sender en verditypevariabel til Enter, blir den bokset inn som et objekt. Hvis du sender samme variabel til Enter igjen, blir den bokset som et eget objekt, og thethread blokkerer ikke. I dette tilfellet er koden som Monitor angivelig skal beskytte ikke beskyttet. Videre, når du sender variabelen til Exit, opprettes enda et separat objekt. Fordi objektet som sendes til Exit er forskjellig fra objektet som sendes til Enter, kaster Monitor SynchronizationLockException. For mer informasjon, se det konseptuelle temaet Monitorer.




Foregående:Oppgrader Python 2.6.6 til 2.7.5 på Centos 6.4-systemet
Neste:Forskjellen mellom Directory.GetCurrentDirectory og Application.StartupPath
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com