Domanda

Ho un codice che "suona" come questo:

filo 1

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

filo 2

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

Ora, mentre questo stava lavorando bene in passato, ora con un sistema SMP questo codice non funziona come previsto. Penso che userò clock_gettime con CLOCK_MONOTONIC, ma vorrei orecchio alcuni altri suggerimenti prima.

È stato utile?

Soluzione

In teoria dovrebbe essere il TSC syncronised tra tutte le CPU su una scheda madre, ma in alcuni sistemi SMP non lo è, la colpa al produttore della scheda madre. Inoltre, in alcuni vecchi chip TSC sembra cambiare con lo stato di alimentazione della CPU che rende potenzialmente molto inaffidabile. clock_gettime (CLOCK_MONOTONIC) è più affidabile, ma ha più testa (si tratta di una chiamata di sistema), ma è di gran lunga il modo migliore per farlo.

Suppongo inoltre che stai bloccando lo strutture dati:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top