Pregunta

Tengo un código que "suena" como esto:

hilo 1

now = rdtsc();
for_each_member_in_a_list {
   if ( member_in_list.deadline() <= now ) {
      do_something;
   }
}

hilo 2

now = rdtsc();
for_each_member_in_a_list {
   member_in_list.updatedealine( foo(now, ...) );
}

Ahora, mientras esto estaba funcionando bien en el pasado ahora con un sistema SMP este código no funciona según lo previsto. Creo que voy a utilizar clock_gettime con CLOCK_MONOTONIC, pero me gustaría oído algunos otros consejos en primer lugar.

¿Fue útil?

Solución

En teoría debería ser el TSC Syncronised entre todos los de la CPU en una placa base, pero en algunos sistemas SMP no lo es, culpar al fabricante de la placa. También, en algunos chips más antiguos TSC parece cambiar con el estado de energía de la CPU por lo que es potencialmente muy poco fiable. clock_gettime (CLOCK_MONOTONIC) es más fiable, pero tiene más sobrecarga (es una llamada al sistema), sino que es, con mucho, la mejor manera de hacer esto.

También supongo que estés bloqueo de las estructuras de datos:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top