どのようなケースではCLOCK_MONOTONICが使用できない場合があります

ハート:

Javaでは、System.nanoTime()の単調Linux上での実装という事実に依存しているCLOCK_MONOTONICOSで利用可能です。それができないなら、それはへのフォールバックgettimeofdayの間隔を用いて測定された負の時間間隔を得ることになりますnanoTimeたとえば、次のテストが失敗することがあります。

long t1 = System.nanoTime();
long t2 = System.nanoTime();
assert t2 >= t1

どのようなケースではCLOCK_MONOTONIC、サーバ上で使用できない場合がありますか?それは、と仮定することは合理的であるCLOCK_MONOTONICクロックは、すべての近代的なLinuxサーバ上で利用できるのですか?

スティーブンC:

はい。それを考えるのが妥当です。

gettime手動入力の文言から、我々はglibcのの本当に古いバージョンはサポートしていないことを推測することができますCLOCK_MONOTONIC(私はまだ何歳把握しようとしています...しかし、おそらくglibcのは、POSIX 1003.1準拠を主張する場合。)

CLOCK_MONOTONICそれはサポートしていないに準拠したlibcの実装のための可能性が残っても、IEEE STD 1003.1、2004 Editionで(少なくとも)指定されましたCLOCK_MONOTONIC

Linuxカーネルのソースコードはのサポートを持っていたCLOCK_MONOTONIC時計のLinux 3.0以降、少なくとも(2011)。

他のソースから、それはまた、あなたのシステムのglibcのが構築された方法によって異なります。(「エミュレートタイマー」で構築された場合は、CLOCK_MONOTONICサポートされていません。)

ここではサポートされていないいくつかの例は以下のとおりです。

  • いくつかの古いCPUチップに問題がある場合もあります。例えばhttps://bugzilla.redhat.com/show_bug.cgi?id=1499480

  • これは、Cygwinのいくつかの(すべて?)のバージョンでサポートされていません。

  • これは、ARM上のuClibcをの一部(全て?)のバージョンでサポートされていません。


ことも可能であるCLOCK_MONOTONICサポートされていますが、バギーなければ:

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=186840&siteId=1