关于sleep函数

关于sleep函数以前很喜欢用sleep和usleep函数来做定时器。确实方便啊。但是昨天在公司用这个函数写了个东西,被说这2个函数最好别在多线程里面使用。然后叫我改一个定时器方案。查看了man文档。发现sleep还真

大家好,又见面了,我是你们的朋友全栈君。

以前很喜欢用sleep和usleep函数来做定时器。确实方便啊。但是昨天在公司用这个函数写了个东西,被说这2个函数最好别在多线程里面使用。然后叫我改一个定时器方案。查看了man文档。发现sleep还真有问题。里面就写得有BUG:

 

BUGS
sleep() may be implemented using SIGALRM; mixing calls to alarm() and sleep() is a bad idea.

       Using longjmp() from a signal handler or modifying the handling of SIGALRM while sleeping will cause undefined results.

 


 

说到了用sleep在多线程的不适合。因为是用的信号驱动来实现的。可能要引起不确定的因素。后来去网上找了下其他的方法,这里把方法贴出来。一个在多线程中比较好的实现是利用的pthread库里面的pthread_cond_timewait()函数来实现。下面贴出来代码。都比较基础。

 1 void thread_sleep(int second)
 2 {
 3      /*  time wait */
 4     struct timespec outtime;
 5     pthread_cond_t cond;
 6     pthread_mutex_t mutex;
 7 
 8     /*  timer init */
 9     pthread_mutex_init(&mutex, NULL); 
10     pthread_cond_init(&cond, NULL);
11 
12     pthread_mutex_lock(&mutex);
13     outtime.tv_sec = time(NULL) + second;  
14     outtime.tv_nsec = 0;
15     pthread_cond_timedwait(&cond, &mutex, &outtime);
16     pthread_mutex_unlock(&mutex);
17 }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155007.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql将字符串转为数字

    mysql将字符串转为数字MySQL字符串+0即可转为数字:<!–查找版本是否满足区间–><selectid="isVersion"resultType="java.lang.String"parameterType="map">SELECTversion_idfromjob_release_versionwheresrc_ver…

    2022年5月29日
    44
  • date转成localdate_localdatetime转localdate

    date转成localdate_localdatetime转localdate/** *将LocalDate转为Date * *@paramlocalDate *@returnjava.util.Date */ publicstaticDatelocalDateToDate(LocalDatelocalDate){ returnDate.from(localDate.atStartOfDay(ZoneId.syste…

    2022年10月3日
    4
  • 跳过谷歌验证码_如何获取游戏验证码

    跳过谷歌验证码_如何获取游戏验证码本月底,谷歌Google即将停止全球图片验证码服务,这个困扰我们多年的验证码终于要退出历史的舞台了。官方宣告可以看以下截图:想必验证码的发展史已经众所周知了,从2002年到如今,经过了16年的发展,

    2022年8月1日
    12
  • S3C2440时钟配置「建议收藏」

    S3C2440时钟配置「建议收藏」首先来看一下S3C2440的时钟整体框图:CPU工作于FCLKFCLKUPTO400MHZAHB工作于HCLKHCLKUPTO136MHZAPB工作于PCLKPCLKUPTO68MHZ如何得到以上时钟频率(时钟源:12M晶振):通过PLL锁相环可以得到以上3个所需要的时钟S3C2440有两个PLL一个MPLL是提供时钟给CPU用另一个UPLL提…

    2022年5月15日
    44
  • STL库基础学习

    STL库基础学习目录1.什么是STL库2.几种常见的STL模板(1)vector1.vector向量模板2.vector迭代器3.常见方法与用法(2)list(3)queue和stack(4)set和map3.几种STL的时间复杂度比较1.什么是STL库◦STL又称为标准模板库,是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。◦也就是说,有了STL,数据结…

    2022年10月15日
    4
  • windows cuda安装_虚拟机 cuda

    windows cuda安装_虚拟机 cuda1.cuda的安装到 https://developer.nvidia.com/cuda-downloads(旧:URL )去下载。在安装的时候一定要自定义安装,否则将会安装

    2022年8月6日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号