RDTs para marcar prazos de tempo
-
22-08-2019 - |
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.
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:)