Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 18907|Svar: 0

[Källa] lås Varför kan bara låsa referensen men inte värdetypen

[Kopiera länk]
Publicerad på 2016-12-08 10:43:37 | | |

Om du skickar en värdetyp kommer den att vara boxad, och nästa gång koden körs här kommer den att boxas igen, och det kommer inte vara samma objekt två gånger, så det kan inte låsas



lock(x)
{
  ...
}

Låsningen görs faktiskt via Monitor-objektet:

Ovanstående är ekvivalent med:

System.Objekt obj = (System.Objekt)x;
System.Threading.Monitor.Enter(obj);
Försök
{
  ...   
}
slutligen
{
  System.Threading.Monitor.Exit(obj);
}

Sedan citerar MSDN:s ursprungliga ord:
Använd Monitor för att låsa objekt (det vill säga referenstyper), inte värdetyper. När du skickar en värdetypvariabel till Enter är den inramad som ett objekt. Om du skickar samma variabel till Enter igen är den boxad som ett separat objekt, och thethread blockerar inte. I det här fallet är koden som Monitor ska skydda inte skyddad. Dessutom, när du skickar variabeln till Exit, skapas ännu ett separat objekt. Eftersom objektet som skickas till Exit skiljer sig från objektet som skickas till Enter, kastar Monitor SynchronizationLockException. För mer information, se det konceptuella ämnet Monitors.




Föregående:Uppgradera Python 2.6.6 till 2.7.5 på Centos 6.4-systemet
Nästa:Skillnad mellan Directory.GetCurrentDirectory och Application.StartupPath
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com