Tel-Ran Students Forum
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Tel-Ran Students Forum

Forum for Tel-Ran students learning Java
 
HomeHome  Latest imagesLatest images  SearchSearch  RegisterRegister  Log in  

 

 Volatile

Go down 
AuthorMessage
Next
Admin
Next


Сообщения : 12
Дата регистрации : 2016-01-14

Volatile Empty
PostSubject: Volatile   Volatile Empty6/2/2016, 19:40

В компьютере есть память, где хранятся данные и команды (код), а также процессор, который исполняет эти команды и работает с данными. Процессор считывает данные из памяти, изменяет и записывает их обратно в память. Чтобы ускорить работу процессора в него встроили свою «быструю» память – кэш.
Чтобы ускорить свою работу, процессор копирует самые часто используемые переменные и области памяти в свой кэш и все изменения с ними производит в этой быстрой памяти. А после – копирует обратно в «медленную» память. Медленная память все это время содержит старые(!) (неизмененные) значения переменных.
И тогда может возникнуть проблема. Одна нить меняет переменную, такую как isCancel или isInterrupted из примера выше, а вторая нить «не видит» этого изменения, т.к. оно было совершено в быстрой памяти. Это следствие того, что нити не имеют доступа к кэшу друг друга. (Процессор часто содержит несколько независимых ядер и нити физически могут исполняться на разных ядрах.)
Back to top Go down
https://tel-ran.board-directory.net
 
Volatile
Back to top 
Page 1 of 1

Permissions in this forum:You cannot reply to topics in this forum
Tel-Ran Students Forum :: Java-12j :: Classworks-
Jump to: