Линк към 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 е изчислена правилно, както очаквахме.
Код:
Резюме: волатилността не гарантира безопасност на нишките, както се вижда в горния пример.
|