Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 18907|Відповідь: 0

[Джерело] Чому можна заблокувати лише посилання, але не тип значення

[Копіювати посилання]
Опубліковано 08.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 для блокування об'єктів (тобто типів посилань), а не для типів значень. Коли ви передаєте змінну типу значення до 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