Чӣ гуна хондани тағирёбандаи аз хотираи умумӣ тавассути сӯрохиҳо сурат мегирад?
sobes.tech AI
Ҷавоб аз AI
Дар Java, хондани тағйирёбандаи аз хотираи умумӣ тавассути сӯрохҳо бо назардошти модели хотираи Java (Java Memory Model) сурат мегирад. Ҳар як сӯрох метавонад нусхаи маҳаллии тағйирёбандаро дар кеши процессор дошта бошад, бинобар ин барои кафолат додани хондани арзиши актуалӣ аз хотираи умумӣ бояд синхронӣ ба назар гирифта шавад.
Агар тағйирёбанда бо калимаи калидии volatile эълон карда шавад, хондан ва навишт ба ин тағйирёбанда мустақиман аз хотираи асосӣ сурат мегирад, ки ин намоёнгардонии тағйиротро байни сӯрохҳо бе синхронсозии иловагӣ таъмин мекунад.
Агар volatile истифода нашуда бошад, барои хондани дурустии тағйирёбанда аз хотираи умумӣ бояд блокҳои синхронӣ (synchronized) истифода шаванд, ки мутобиқати хотира ва намоёнгардонии тағйиротро байни сӯрохҳо таъмин мекунанд.
Масалан бо volatile:
volatile int sharedVar;
// Дар як сӯрох
sharedVar = 10;
// Дар сӯрохи дигар
int маҳаллииКопия = sharedVar; // кафолат медиҳад, ки арзиши навро мебинад
Бе volatile ё synchronized, сӯрох метавонад арзиши кӯҳнаи тағйирёбандаро бинед, ки бо сабаби кешгузорӣ мешавад.