Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 18907|Antwort: 0

[Quelle] Lock Why kann nur die Referenz sperren, aber nicht den Werttyp

[Link kopieren]
Veröffentlicht am 08.12.2016 10:43:37 | | |

Wenn du einen Werttyp gibst, wird er in eine Box gelegt, und beim nächsten Mal, wenn der Code hier ausgeführt wird, wird er erneut in eine Box gelegt, und es ist nicht zweimal dasselbe Objekt, sodass es nicht gesperrt werden kann



lock(x)
{
  ...
}

Die Sperre erfolgt tatsächlich über das Monitor-Objekt:

Das oben Genannte entspricht bei:

System.Objekt obj = (System.Objekt)x;
System.Threading.Monitor.Enter(obj);
Versuch es
{
  ...   
}
endlich
{
  System.Threading.Monitor.Exit(obj);
}

Dann um die ursprünglichen Worte von MSDN zu zitieren:
Verwenden Sie Monitor, um Objekte (also Referenztypen) zu sperren, nicht um Wertetypen. Wenn du eine Wert-Typ-Variable an Enter gibst, wird sie als Objekt geboxt. Wenn du dieselbe Variable erneut an Enter gibst, wird sie als separates Objekt geboxt, und der Thread blockiert nicht. In diesem Fall ist der Code, den Monitor angeblich schützen soll, nicht geschützt. Außerdem wird beim Weitergeben der Variablen an Exit noch ein weiteres separates Objekt erstellt. Da das an Exit übergebene Objekt sich von dem an Enter übergebenen Objekt unterscheidet, wirft Monitor SynchronizationLockException aus. Weitere Informationen finden Sie im konzeptionellen Thema Monitore.




Vorhergehend:Upgrade von Python 2.6.6 auf 2.7.5 auf dem Centos 6.4-System
Nächster:Unterschied zwischen Directory.GetCurrentDirectory und Application.StartupPath
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com