Question

J'ai un code qui "sonne" comme ceci:

fil 1

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

fil 2

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

alors que ce fonctionnait bien dans le passé maintenant avec un système SMP ce code ne fonctionne pas comme prévu. Je pense que je vais utiliser clock_gettime avec CLOCK_MONOTONIC, mais je voudrais à l'oreille quelques autres conseils d'abord.

Était-ce utile?

La solution

En théorie TSC devrait être le syncronised entre toutes les années CPU sur une carte mère, mais dans certains systèmes SMP ce n'est pas, blâmer le fabricant de la carte mère. En outre, sur certaines puces âgées TSC semble changer avec l'état d'alimentation de l'unité centrale de traitement qui en fait potentiellement très peu fiable. clock_gettime (CLOCK_MONOTONIC) est plus fiable, mais a plus de frais généraux (c'est un appel système), mais il est de loin la meilleure façon de le faire.

Je suppose que vous aussi verrouiller vos structures de données:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top