Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 18907|Atbildi: 0

[Avots] bloķēt Kāpēc var bloķēt tikai atsauci, bet ne vērtības tipu

[Kopēt saiti]
Publicēts 08.12.2016 10:43:37 | | |

Ja nododat vērtības tipu, tas tiks ievietots kastē, un nākamajā reizē, kad kods tiks palaists šeit, tas atkal tiks ievietots kastē, un tas nebūs tas pats objekts divas reizes, tāpēc to nevar bloķēt



slēdzene(x)
{
  ...
}

Bloķēšana faktiski tiek veikta, izmantojot monitora objektu:

Iepriekš minētais ir līdzvērtīgs:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
izmēģināt
{
  ...   
}
Beidzot
{
  System.Threading.Monitor.Exit(obj);
}

Tad, citējot MSDN oriģinālos vārdus:
Izmantojiet monitoru, lai bloķētu objektus (t.i., atsauču tipus), nevis vērtību tipus. Nododot vērtības tipa mainīgo taustiņam Enter, tas tiek ievietots lodziņā kā objekts. Ja jūs nododat to pašu mainīgo vēlreiz Enter, tas tiek ievietots kastē kā atsevišķs objekts, un pavediens netiek bloķēts. Šajā gadījumā kods, ko Monitorsit kā aizsargā, nav aizsargāts. Turklāt, nododot mainīgo iziet, tiek izveidots vēl viens atsevišķs objekts. Tā kā izejai nodotais objekts atšķiras no objekta, kas nodots taustiņam Enter, monitors izmet SynchronizationLockException. Plašāku informāciju skatiet konceptuālajā tēmā Monitori.




Iepriekšējo:Jauniniet Python 2.6.6 uz 2.7.5 Centos 6.4 sistēmā
Nākamo:Atšķirība starp Directory.GetCurrentDirectory un Application.StartupPath
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com