Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 18907|Odgovoriti: 0

[Vir] zaklepanje: Zakaj lahko zaklenemo le referenco, ne pa tudi vrste vrednosti

[Kopiraj povezavo]
Objavljeno na 8. 12. 2016 10:43:37 | | |

Če posredujete tip vrednosti, bo ta zaklenjen, in naslednjič, ko se koda izvede tukaj, bo spet zabeležena, in ne bo isti objekt dvakrat, zato ga ni mogoče zakleniti



lock(x)
{
  ...
}

Zaklep se dejansko izvede preko objekta Monitor:

Zgornje je ekvivalentno:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
poskusi
{
  ...   
}
končno
{
  System.Threading.Monitor.Exit(obj);
}

Nato, če citiram izvirne besede MSDN:
Uporabite Monitor za zaklepanje objektov (torej referenčnih tipov), ne vrednostnih tipov. Ko predaš spremenljivko tipa avalue v Enter, je ta označena kot objekt. Če isto spremenljivko ponovno posredujete v Enter in je označena kot ločen objekt in nit se ne blokira. V tem primeru koda, ki naj bi jo Monitor varoval, ni zaščitena. Poleg tega, ko preneseš spremenljivko na Exit, se ustvari še en ločen objekt. Ker je objekt, poslan v Exit, drugačen od objekta, ki je bil poslan v Enter, Monitor sproži SynchronizationLockException. Za več informacij glejte konceptualno temo Monitorji.




Prejšnji:Nadgradnja Pythona 2.6.6 na 2.7.5 na sistemu Centos 6.4
Naslednji:Razlika med Directory.GetCurrentDirectory in Application.StartupPath
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com