時間をとってくる関数

Trouble with timestampsというのを見ていろいろ思い出したので。

clock_gettime(2) もあるし、 gettimeofday(2) もあるのだけど後者はカーネルの内部でロックをとっていたように思う。mktime(3) はダメなの。中でファイルIOにロックをとっているから。僕が書いたわけではないのだけど、今年一番のヒットだったパッチを調べてるときに、カーネルとかlibcの中をいろいろ見ていると、そのプロセスのロケールが書いてあるファイルを開くためにロックが必要だったという話で、まあ誰も使っていないのだけど、中で mktime(3)を使っている httpd_util:rfc1123_date/1 とか erlang:localtime_to_universaltime/2 を使ってはいけないということをメモしておこう。

あとはErlang使いなら必須の知識として、erlang:now() ではなく os:timestamp() を使いましょうというのも、いつも忘れてググるのに時間がかかるのでここにメモしておく。 

あとは gettimeofday(2) というのあったのだけど、これがなんでダメになったのかは思い出せない…monotonic clockを使う場合にはよかったのだけどロックをとってるんだかmonotonicじゃないだかでやめた気がするのだが詳しいエロい人おしえてください。

終わってからなんだけど、ずっと下書きになってたこれをRiakのアドベントカレンダーに持っていけばよかったわ。
 

追記 2014/8/15

httpd_util:rfc1123_date/0 もダメだった。 https://gist.github.com/kuenishi/c9867a6f219343344f51


gist:c9867a6f219343344f51