localtime関数は、返却するデータを、スレッド固有データ(Thread Specific Data, 略して TSD*1 )として確保すれば、スレッドセーフな関数として実装できると思います。 グローバル変数や、関数内で宣言されたstatic変数など、「静的な記憶期間をもつ変数」は、自動変数と異なり、普通はスレッド間で共有して使用することになります。しかし、上記のTSDを用いると、「静的な記憶期間を持ちつつスレッド毎に独立した」変数を使うことができます。以下に、JMの解説を引用しておきます。 プログラムではスレッドごとに値の異なる グローバル変数や静的変数がしばしば必要となる。 複数のスレッドは 1 つのメモリ空間を共有するため、 通常の変数ではこれを実現することができない。 スレッド固有データは、 この必要性への POSIX スレッドの答えである。 それぞれのスレッドはスレッド固有デ