Re: MSDN volatile sample
"George" <George@discussions.microsoft.com> wrote in message
news:DA2DB676-169C-474B-8078-B9506ACE6450@microsoft.com...
Yes, I agree with the general guideline, Alexander. :-)
This can happen only if the compiler can reliably deduce that the loop
condition is never changed while it runs.
But in the original MSDN sample, compiler should not optimize and making
assumption that loop control condition will not be change by another
thread
is incorrect.
The only thing the compiler "should" do is follow the standard. If code
fails to operate correctly with a conforming compiler, then it is the code
that is buggy, not the optimizer. For example, the standard says that the
value of an uninitialized variable is undefined. If code only works when
the variables are zero-filled, then it is not the optimizer's fault when it
omits zero-filling and the code breaks.
The C++ language assumes a single thread. So the compiler is allowed to
optimize that.
The volatile keyword informs the compiler that the value can change
asynchronously, outside the single threaded flow. This could be hardware,
another thread, etc.
regards,
George
"Alexander Grigoriev" wrote:
This can happen only if the compiler can reliably deduce that the loop
condition is never changed while it runs.
"George" <George@discussions.microsoft.com> wrote in message
news:E274E254-940F-4B51-9C1B-F677800373A7@microsoft.com...
Yes Alexander,
MSDN has no formally description about how to optimize loop. It is in
this
discussion, some guy mentioned that loop,
while (condition)
{
// loop statement
}
could be optimized to
if (condition)
{
for (;;)
{
// loop statement
}
}
do you have any comments?
regards,
George
"Alexander Grigoriev" wrote:
"George" <George@discussions.microsoft.com> wrote in message
news:B04E6D88-7B14-4F80-8C31-77491BBE61D8@microsoft.com...
Thanks Bo,
In this discussion, I feel Visual Studio compiler will do some wrong
optimization, which assumes that loop control variable will not be
changed
by
another thread (I think this is what MSDN tells us). But actually,
when
we
MSDN sample actually doesn't mention possible loop optimization
anywhere.