Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: C++
Expertise: Advanced
Feb 9, 2000



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Volatile Semantics and Container Objects

Volatile objects are used in multithreaded applications and applications that map hardware devices into registers. Although you can declare an STL container object with the volatile qualifier, you will not be able to use any of its member functions safely. The problem is that none of the STL containers declares any volatile member functions. Yet calling a non-volatile member function on a volatile object is ill-formed. Consider the following example:

  volatile vector <int> vi;
  vi.push_back(1); // trouble; push_back() isn't volatile

Some compilers will compile this code with warnings; others will issue an error message. Either way, the effect of calling a non-volatile member function on a volatile object is unpredictable because the state of the object might be changed by another thread while the function is executing.

Is there a way to get around this? Probably not. By design, STL containers don't include volatile member functions because of the performance penalty and implementation complexity associated with volatile semantics.

Danny Kalev
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date