Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 18907|Antwoord: 0

[Bron] Lock Why kan alleen de referentie vergrendelen maar niet het waardetype

[Link kopiëren]
Geplaatst op 08-12-2016 10:43:37 | | |

Als je een waardetype doorgeeft, wordt het in een box gedrukt, en de volgende keer dat de code hier draait, wordt het opnieuw in een box geplaatst, en het is niet twee keer hetzelfde object, dus het kan niet worden vergrendeld



lock(x)
{
  ...
}

De vergrendeling gebeurt daadwerkelijk via het Monitor-object:

Het bovenstaande is gelijk aan:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
Probeer het
{
  ...   
}
eindelijk
{
  System.Threading.Monitor.Exit(obj);
}

Dan om de oorspronkelijke woorden van MSDN te citeren:
Gebruik Monitor om objecten (dat wil zeggen referentietypen) te vergrendelen, niet om waardetypes. Wanneer je een waardetypevariabele naar Enter stuurt, wordt deze als object ingepakt. Als je dezelfde variabele opnieuw aan Enter doorgeeft, wordt deze als een apart object geboxt en blokkeert thethread niet. In dit geval is de code die Monitor zogenaamd beschermt niet beschermd. Bovendien wordt er bij het doorgeven van de variabele aan Exit nog een apart object aangemaakt. Omdat het object dat aan Exit wordt doorgegeven verschilt is van het object dat naar Enter wordt doorgegeven, gooit Monitor SynchronizationLockException. Voor meer informatie, zie het conceptuele onderwerp Monitors.




Vorig:Upgrade Python 2.6.6 naar 2.7.5 op het Centos 6.4-systeem
Volgend:Verschil tussen Directory.GetCurrentDirectory en Application.StartupPath
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com