获取当天剩余时间

概述

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

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

空空如常

求真得真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值