2009-02-07 4 views
0

J'ai un code qui "sonne" comme ceci:rdts pour marquer le temps échéances

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, ...)); 
} 

maintenant 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 d'abord entendre quelques autres astuces.

Répondre

1

En théorie, TSC devrait être syncronisé entre tous les processeurs d'une carte mère, mais dans certains systèmes SMP, ce n'est pas le cas, reprocher au fabricant de la carte mère. De plus, sur certaines puces plus anciennes, TSC semble changer avec l'état d'alimentation du processeur, ce qui le rend 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 c'est de loin la meilleure façon de le faire.

Je suppose également que vous verrouillez vos structures de données :)

+0

J'utilise des structures de données sans clé. –

Questions connexes