我在多线程程序中调用mktime,并希望将字符串传递给Unix时间戳。然后我发现程序的性能很差,CPU空闲几乎降到0%。
tm tm_;
char buf[128]= {0};
strcpy(buf, strValue.c_str());
strptime(buf, "%Y-%m-%d %H:%M:%S", &tm_);
int ts = mktime(&tm_);
我使用perf top来分析程序。它显示自旋锁占用了大部分CPU时间。(高达80%)。
当我设置tm_.tm_isdst = 0时,似乎不再调用自旋锁。
我的问题是:为什么将tm_isdst设置为0将保存旋转锁的调用?我读了mktime的源代码,似乎当tm_isdst设置为0时,它不会保存调用pthread_mutex_lock的localtime函数的任何调用。