Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 18907|Válasz: 0

[Forrás] lock Miért csak a hivatkozást tudja zárni, de az értéktípust nem.

[Linket másol]
Közzétéve 2016. 12. 08. 10:43:37 | | |

Ha egy értéktípust passzol, az dobozba kerül, és amikor a kód legközelebb itt fut, újra becsomagolják, és nem lesz ugyanaz az objektum kétszer, így nem lehet zárolni



lock(x)
{
  ...
}

A zárolás valójában a Monitor objektumon keresztül történik:

A fentiek ekvivalena megfelel annak:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
próbáld ki
{
  ...   
}
végül
{
  System.Threading.Monitor.Exit(obj);
}

Akkor idézve az MSDN eredeti szavait:
Használd a Monitort a tárgyak (azaz referenciatípusok) zárolására, értéktípusok nélkül. Amikor az érték típusú változót az Enter mappába adjuk, az objektumként kerül bezárva. Ha ugyanazt a változót újra átadod az Enter bekapcsolónak, az külön objektumként kerül bezárásra, és a thread nem blokkol. Ebben az esetben az a kód, amelyet a Monitor állítólag véd, nem védett. Továbbá, amikor átadod a változót Exit-re, még egy különálló objektum jön létre. Mivel az Exit-hez továbbított objektum eltér attól, amit az Enter felé továbbított, a monitor SynchronizationLockException-t dob. További információért lásd: Monitorok című koncepcionális téma.




Előző:Frissítse a Python 2.6.6-ot 2.7.5-re a Centos 6.4 rendszeren
Következő:Különbség a Directory.GetCurrentDirectory és az Application.StartupPath között
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com