Кіріспе

Кейбір бағдарламалау тілдерінде айнымалыларды белгілеу үшін қолданылатын кілт сөз. Компьютерлік бағдарламалауда volatile (ұшпалы) дегеніміз – уақыт өте келе, кейбір кодтың бақылауынан тыс өзгеріске бейімділік. Ұшпалылық функция шақыру конвенцияларына әсер етеді, сондай-ақ айнымалылардың сақталу, қолжетімділік және кэштелу әдісіне де әсер етеді. C, C++, C# және Java бағдарламалау тілдерінде volatile кілт сөзі мәннің әртүрлі қолжетімділіктер арасында өзгеруі мүмкін екенін көрсетеді, тіпті ол өзгертілмегендей көрінсе де. Бұл кілт сөз компилятордың оқу немесе жазу операцияларын оңтайландыруын болдырмайды, соның салдарынан ескірген мәнді дұрыс емес пайдалану немесе жазуларды жою мүмкіндігін болдырмайды. Ұшпалы мәндер көбінесе аппараттық құрылғыларға қолжетімділікте (жадқа бейнеленген I/O) пайда болады, онда жадтан оқу немесе жадқа жазу операциялары шеткі құрылғылармен байланысу үшін қолданылады, сондай-ақ көп жіпті бағдарламалауда, мұнда басқа жіп мәнді өзгертуі мүмкін. Көп қолданылатын кілт сөз болғанына қарамастан, volatile мінез-құлқы бағдарламалау тілдері арасында айқын ерекшеленеді және оны түсіну қиын болуы мүмкін. C және C++ тілдерінде volatile, const сияқты типтік анықтама болып табылады және типтің қасиеті болып табылады. Сонымен қатар, C және C++ тілдерінде көп жіпті сценарийлердің көпшілігінде volatile жұмыс істемейді, сондықтан оны пайдалану ұсынылмайды. Java және C# тілдерінде volatile айнымалының қасиеті болып табылады және айнымалы байланысқан объектінің өзгеруі мүмкін екенін көрсетеді, және ол негізінен көп жіпті бағдарламалау үшін арналған. D бағдарламалау тілінде көп жіпті пайдалану үшін бөлек кілт сөз бар, бірақ volatile кілт сөзі жоқ.

C++11

C++11 ISO стандартына сәйкес, `volatile` кілт сөзі тек аппараттық жадқа қолжетімділік үшін ғана арналған; оны екі жіп арасындағы байланыс үшін қолданбаңыз. Екі жіп арасындағы байланыс үшін стандартты кітапхана `std::atomic<T>` үлгілерін ұсынады.

Явада

Java бағдарламалау тілінде де volatile кілт сөзі бар, бірақ ол сәл басқа мақсатта қолданылады. Java-ның барлық нұсқаларында барлық volatile айнымалыларды оқу және жазу бойынша жаһандық реттелу бар (volatile айнымалылар бойынша бұл жаһандық реттелу, барлық синхрондау әрекеттерінің толық ретімен салыстырғанда, ішінара реттелу болып табылады). Бұл, кез келген жіп volatile өріске кіргенде, жалғастыру алдында оның ағымдағы мәнін оқитынын білдіреді, кэштелген мәнді пайдаланудың орнына. (Дегенмен, volatile оқу және жазудың, қалыпты оқу және жазумен салыстырылатын ретіне кепілдік жоқ, яғни ол көбінесе тиімді жіптік құрылым емес.) Java 5 немесе одан кейінгі нұсқаларында volatile оқу және жазу, mutex-ты алу және босату сияқты, "осыған дейін" қатынасын орнатады. volatile пайдалану құлыптан жылдам болуы мүмкін, бірақ Java 5-тен бұрын кейбір жағдайларда жұмыс істемейді. Java 5-те volatile тиімді болатын жағдайлар ауқымы кеңейтілді; атап айтқанда, екі рет тексерілген құлып енді дұрыс жұмыс істейді.