Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 18907|Отговор: 0

[Източник] заключване Защо може да заключи само референтния тип, но не и типа стойност

[Копирай линк]
Публикувано в 8.12.2016 г. 10:43:37 ч. | | |

Ако предадеш тип стойност, той ще бъде в кутия, а следващия път, когато кодът се изпълни тук, ще бъде отново в кутия и няма да е един и същ обект два пъти, така че не може да бъде заключен



Заключване(x)
{
  ...
}

Заключването всъщност се извършва чрез обекта Monitor:

Горното е еквивалентно на:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
Опитай
{
  ...   
}
накрая
{
  System.Threading.Monitor.Exit(obj);
}

След това цитирам оригиналните думи на MSDN:
Използвайте Monitor за заключване на обекти (т.е. референтни типове), а не за типове стойности. Когато подадете променлива тип avalue на Enter, тя се поставя в кутия като обект. Ако подадеш същата променлива към Enter отново, тя се поставя в кутия като отделен обект и нишката не блокира. В този случай кодът, който Monitor уж защитава, не е защитен. Освен това, когато предадеш променливата към Exit, се създава още един отделен обект. Тъй като обектът, прехвърлен към Exit, е различен от обекта, прехвърлен към Enter, Monitor хвърля SynchronizationLockException. За повече информация вижте концептуалната тема Монитори.




Предишен:Ъпгрейднете Python 2.6.6 до 2.7.5 на системата Centos 6.4
Следващ:Разлика между Directory.GetCurrentDirectory и Application.StartupPath
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com