Можем ли да използваме static и volatile заедно в C?
Можем ли да използваме static и volatile заедно в C?

Видео: Можем ли да използваме static и volatile заедно в C?

Видео: Можем ли да използваме static и volatile заедно в C?
Видео: Java Multithreading : AtomicReference, ScheduledExecutorService и монада Either. Многопоточность. 2024, Април
Anonim

Статично променливите запазват стойността си между извикванията на функции. Летлив променливи (което не е обратното на статичен ) са използван когато променлива е използван както в рамките на ISR (програма за обслужване на прекъсване), така и извън нея. Летлив казва на компилатора винаги да зарежда avariable от RAM, вместо да го кешира в CPUregister.

По подобен начин може да се запитаме, можем ли да използваме статични и летливи заедно?

Дори ако Вие достъп а статичен стойност чрез множество нишки, всяка нишка мога имат своето локално кеширано копие! За да избегнете това можеш декларирайте променливата като статично летливи и този ще принуди нишката да чете всеки път глобалната стойност. Въпреки това, летлив не е заместител на правилната синхронизация!

По същия начин защо използваме volatile в C? C е променлив ключова дума е квалификатор, който се прилага към променлива, когато е декларирана. Той казва на компилатора, че стойността на променливата може да се промени по всяко време - без каквото и да е действие от кода, който компилаторът намира наблизо. Последиците от това са доста сериозни.

Имайки предвид това, какво означава static volatile в C?

статичен се отнася до обхвата на променливата. Ако променливата е глобална, това означава, че обхватът е ограничен до изходния файл, в който е декларирана. Ако променливата е локална за функция, това означава, че паметта, използвана за съхраняване на тази променлива, е в статично разпределената памет на приложението.

Можем ли да използваме const с volatile в C?

да. Променлива мога да бъдат обявени и за двете летлив и постоянен в ° С . Конст модификаторът не позволява промяна на стойността на променливата от вътрешна програма. Но това не означава тази стойност на const променливата не трябва да се променя от външен код.

Препоръчано: