Pergunta

Eu tenho um código que "sons" como este:

fio 1

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

rosca 2

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

Agora, enquanto este estava a trabalhar bem no passado agora com um sistema SMP este código não funciona como pretendido. Acho que vou usar clock_gettime com CLOCK_MONOTONIC, mas eu gostaria de ouvido algumas outras dicas em primeiro lugar.

Foi útil?

Solução

Em TSC teoria deve ser o syncronised entre toda a CPU está em uma placa-mãe, mas em alguns sistemas SMP não é, culpar o fabricante da placa. Além disso, em alguns chips mais velhos TSC parece mudar com o estado de energia da CPU tornando-se potencialmente muito confiável. clock_gettime (CLOCK_MONOTONIC) é mais confiável, mas tem mais sobrecarga (é uma chamada de sistema), mas é de longe a melhor maneira de fazer isso.

Eu também assumir que você está travando suas estruturas de dados:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top