[C++] localtimeとlocaltime_sの安全性の違い

localtimeがunsafeなのはなぜか。

sprintfなどのように明確なバッファオーバーフローを起こすのではなく、thread unsafeだということ。

localtimeは内部的には、std:timeのstaticな領域を作成し、そこへのポインタを返す、という動作をしている。
multithreadな環境では、別のスレッドで実行されたlocaltimeが同じ領域を使用するので、先に実行された値を上書きする。
だから、unsafeだ、ということ。

localtime_sは、呼び出し側が領域が確保するようになっているのでthread safe。

詳細の説明が以下のblog entryに書かれている。
Kjellkod’s Blog Exploring C++11, part 2 (localtime and time again)
http://kjellkod.wordpress.com/2013/01/22/exploring-c11-part-2-localtime-and-time-again/

広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。