概述
业务测试的过程中,本来有一个时间函数“获取当天剩余时间”,其中使用了localtime()和mktime(),但是在压力测试的过程中发现,两个time函数都不是线程安全的,多线程并发的时候会产生一些随机的错误,结果就是获得的interval时间错误,进而影响到业务流程。
环境
centos:CentOS release 7.0 (Final)或以上版本
GCC:4.8.5
需求
原始需求:根据当前时间点,计算到今天结束还有多少秒,设置数据过期时间。
需求分析,获取当前时间点,转换格式,根据小时、分钟、秒的数据计算当天剩余时间。
代码实现
源代码主要部分。其中switch_time_exp_lt()和switch_time_now()函数是fs内部函数,可以使用time()和localtime()替换。
unsigned int getExpireTime()
{
switch_time_exp_t timenow;
unsigned int interval = 0;
if(SWITCH_STATUS_SUCCESS == switch_time_exp_lt(&timenow, switch_time_now()))
{
interval = ((24 - timenow.tm_hour)*3600) + ((60 - timenow.tm_min)*60) + (60 - timenow.tm_sec);
}
return interval;
}
总结
fs是多线程架构,对于大并发场景下的压力测试要特别注意线程安全的问题。
为了尽可能的提高性能,也有很多技术手段可以不使用加锁的方式解决。
空空如常
求真得真
标签:剩余时间,interval,switch,timenow,获取,当天,tm,time From: https://www.cnblogs.com/qiuzhendezhen/p/18030085