Посилання на 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 обчислюється правильно, як ми й очікували.
Код:
Резюме: волатильність не гарантує безпеку потоку, як видно у наведеному вище прикладі.
|