Erlang のクラッシュに関するいくつかの問題を経験した後、私は clock_gettime(CLOCK_MONOTONIC, &ts) を繰り返し呼び出して逆方向に進むかどうかをチェックするプログラムを作成しましたが、残念ながら逆方向に進む場合があります。
これは私が使用しているテストプログラムです:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
struct timespec ts_start;
struct timespec ts_end;
int i;
clock_gettime(CLOCK_MONOTONIC, &ts_start);
clock_gettime(CLOCK_MONOTONIC, &ts_end);
for(i = 0; i<10000000; i++) {
if(ts_end.tv_sec <= ts_start.tv_sec
&& ts_end.tv_nsec < ts_start.tv_nsec) {
printf("ERROR!\n");
return 1;
}
ts_start.tv_sec = ts_end.tv_sec;
ts_start.tv_nsec = ts_end.tv_nsec;
clock_gettime(CLOCK_MONOTONIC, &ts_end);
}
printf("OK\n");
return 0;
}
私のHyper-V VM(カーネル2.6.18-238.12.1.e15、他のものを試しました)ではエラーが出力されることがありますが、物理マシンでは常にOKが出力されます。
CLOCK_MONOTONIC が単調にならない理由は何ですか?