Frage

Ich habe einen Code, dass "klingt" wie folgt aus:

Thread 1

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

Gewinde 2

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

Jetzt, während dies gut in der Vergangenheit mit einem SMP-System arbeitet jetzt wurde dieser Code funktioniert nicht wie beabsichtigt. Ich glaube, ich mit CLOCK_MONOTONIC verwenden clock_gettime wird, aber ich würde zunächst einige andere Hinweise zu Ohr mögen.

War es hilfreich?

Lösung

In der Theorie sollte TSC sein die synchronisierte zwischen allen CPUs auf einem Motherboard, aber in einigen SMP-Systemen ist es nicht, die Schuld der Motherboard-Hersteller. Auch auf einigen älteren Chips TSC scheint mit dem Leistungszustand der CPU so dass es möglicherweise sehr unzuverlässig zu ändern. clock_gettime (CLOCK_MONOTONIC) ist zuverlässiger, hat aber mehr Aufwand (es ist ein Systemcall), aber es ist bei weitem der beste Weg, dies zu tun.

ich auch nehme an, Sie Sperren Sie Ihre Datenstrukturen:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top