できる限りグーグルで検索しましたが、これに対する良い答えが見つかりませんでした。
localtime_r は、システム時刻を取得するためのスレッドセーフな関数であると想定されています。しかし、Valgrind --tool=drd を使用してアプリケーションをチェックすると、この関数にデータ競合状態があることが一貫してわかります。一般的な検索結果は嘘をついているのですか、それとも単に何かを見逃しているだけですか? 各 localtime_r 呼び出しをミューテックスで囲むのは効率的ではないようです。特に、最初からスレッドセーフであると想定されている場合はなおさらです。これが私がそれを使用している方法です:
timeval handlerTime;
gettimeofday(&handlerTime,NULL);
tm handlerTm;
localtime_r(&handlerTime.tv_sec,&handlerTm);
何か案は?