Es algo terriblemente no portátil.
En algunos compiladores uno de estos puede obras (pero usted tiene que comprobar con plena optimización habilitada, la instrucción vacía puede ser desechado):
for (i = 0; i < spinCount;)
++i; // yes, HERE
o:
for (i = 0; i < spinCount; ++i)
((void)0);
Si Tenga la suerte de que su compilador proporcione una macro o una función intrínseca compilada en la instrucción de ensamblaje nop
, algo así como __noop
en MSVC.
Como último recurso simplemente puede añadir una sola instrucción de montaje (que es dependiente del compilador, puede ser __asm o algo así) para ejecutar ... nada, así:
for (i = 0; i < spinCount; ++i)
__asm nop
o (comprobar su documentación del compilador):
for (i = 0; i < spinCount; ++i)
asm("nop");
EDITAR
Si usted no tiene una instrucción noop
y no se puede añadir el código de montaje (lo siento, ¿qué tipo de com piler que está usando?) puede confiar en la suposición de que una instrucción con un efecto secundario no se optimizará (o, como lo publicó @ouah, un acceso a una variable declarada volatile
).
http://stackoverflow.com/questions/3527829/is-this -a-bug-in-the-intel-c-compiler-icc/3527862 # 3527862 –
sí ............ –
'us'? si este código funciona debe ser una CPU realmente lenta. –