Question

I am a little confuse about how volatile variable effectively accesses from "main" memory. How's it different from a variable (non-volatile) that has a local copy ? What's the typical workflow whenever multiple threads accesses a non-volatile vs a volatile variable ? I mean how do they work behind the scene ?

Was it helpful?

Solution

Let's say you have a variable that can be accessed by multiple threads.

Thread 1 looks at the variable. Because looking at shared memory is more expensive than thread-local memory, it makes a copy of the variable. (Note that an object won't be copied, just its reference.)

Thread 2 looks at the same variable. It decides to change the variable. But Thread 1 doesn't know it! Thread 1 is still using stale data. This is a Very Bad Thing. By making it volatile, each thread must look at the original variable when accessing it. They aren't permitted to make local copies, so it won't get stale.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top