获取当天剩余时间

 

概述

业务测试的过程中,本来有一个时间函数“获取当天剩余时间”,其中使用了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是多线程架构,对于大并发场景下的压力测试要特别注意线程安全的问题。

为了尽可能的提高性能,也有很多技术手段可以不使用加锁的方式解决。

 

空空如常

求真得真

 

posted @ 2024-02-23 17:46  求真得真  阅读(42)  评论(0编辑  收藏  举报