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

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

[Консольна програма] Волатильне навчання ключових слів у .NET/C#

[Копіювати посилання]
Опубліковано 23.05.2018 11:23:40 | | | |
Посилання на MS:Вхід за гіперпосиланням видно.

Волатильне ключове слово вказує, що поле можна змінити кількома потоками, що виконуються одночасно. Поля, оголошені як леткі, не обмежуються оптимізацією компілятора (за умови, що до них звертається один потік). Це гарантує, що поле завжди відображається з найсвіжішим значенням.

Вольтильний модифікатор зазвичай використовується для полів, до яких звертаються кілька потоків, але вони не серіалізують доступ за допомогою блокування.

Волатильні ключові слова можна застосовувати до таких типів полів:

  • Тип цитування.
  • Тип вказівника (у небезпечному контексті). Зверніть увагу, що хоча сам вказівник може бути змінним, об'єкт, на який він вказує, не може бути змінним. Іншими словами, «вказівник на змінний об'єкт» не може бути оголошений.
  • Типи, такі як sbyte, byte, short, ushort, int, uint, char, float і bool.
  • Тип enum з одним із наступних базових типів: байт, sbyte, short, ushort, int або uint.
  • Загальні параметри типів, які відомі як еталонні типи.
  • IntPtr та UIntPtr.


Ключові слова змінних можна застосовувати лише до полів класу або структури.Локальні змінні не можна оголосити як волатильні


Більше ніяких дурниць, напишіть цикл для перевірки:

Давайте перевіримо це 10 000 разів по циклу,Виявив, що вихід значень є правильним, але,Це не пояснюєВолатильний — безпечний для нитокБо якщо перевірити це багато разів, можна побачити помилки в розрахунках! Тому що існує ймовірність правильного результату і ймовірність неправильного результату



Код:



Давайте ще раз перевіримо 100 000 циклів, і ми зможемо виявити, що значення a є неправильним, бо чим менша кількість циклів, тим менша ймовірність помилки, і помилка не така очевидна, як і після 10 000 циклів щойно не було помилки.

У цей момент ми додаємо замок для тестування, і видно, що значення a обчислюється правильно, як ми й очікували.



Код:



Резюме: волатильність не гарантує безпеку потоку, як видно у наведеному вище прикладі.




Попередній:Завантажте інструмент захоплення пакетів smsniff 2.0 китайська версія
Наступний:VS Remote Debug Рішення «Операція налагодження займає більше часу, ніж очікувалося»
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com