'Why is volatile deprecated in C++20?
According to cppreference, most uses of the volatile
keyword are to be deprecated in C++20. What is the disadvantage of volatile
? And what is the alternative solution when not using volatile
?
Solution 1:[1]
There's a good talk by the C++ committee language evolution chair on why.
Brief summary, the places that volatile
is being removed from didn't have any well defined meaning in the standard and just caused confusion.
Motivating (Ambiguous) Examples
- Volatile bit Fields should be specified by your hardware manual and/or compiler.
- Is
+=
a single/atomic instruction? How about++
? - How many reads/writes are needed for
compare_exchange
? What if it fails? - What does
void foo(int volatile n)
mean? orint volatile foo()
? - Should
*vp;
do a load? (This has changed twice in the standard.)
Threading
Historically, people have used volatile
to achieve thread safety in C and C++. In C++11, non-UB ways to create synchronization and shared state between threads were added. I recommend Back to Basics: Concurrency as a good introduction.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Clifford |