пишем волатайл, то переменная будет читаться из памяти а не из кеша проца
и как только мы ее засетим она будет сразу же видна для всех остальных потоков
единственный юзкейс который я увидел это
/// в одном потоке
volatile var isDone = false;
while(!isDone) {...}
// в другом потоке
isDone = true
firstThread.join()
и типа если это делать без volatile, то можно словить deadlock потому что переменная будет читаться из кеша проца (и это потенциально будет старое значение)
но по идее она неюзабельна для апдейтов где нужно сделать обновление значения несколькими потоками тк она гарантирует только одну атомарную операцию
это правильно?
Кажется, в целом всё верно. Непонятен только последний абзац, про "неюзабельно для апдейтов нескольких потоков".
в общем лучше всего учиться использовать happens-before
Обсуждают сегодня