关于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 }

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • EL表达式详解_EL表达式问内置对象属性值

    EL表达式详解_EL表达式问内置对象属性值 EL表达式   1、EL简介1)语法结构    ${expression}2)[]与.运算符   EL提供.和[]两种运算符来存取数据。   当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用[]。例如:     ${user.My-Name}应当改为${user

  • Spring Cloud GateWay网关集群搭建「建议收藏」

    Spring Cloud GateWay网关集群搭建「建议收藏」SpringCloudGateWay网关集群搭建1.环境nginx:1.19.0nacos:1.3.1openjdk:1.8.0_181nacos集群:192.168.8.81192.168.8.82192.168.8.832.实现网关注册nacos中心1)配置依赖pom.xml因为是搭建网关集群,每一个网关应用使用的依赖都是一致的2)修改配置文件配置网关服务gatewaya的nacos集群注册中心地

    2022年10月10日
  • 游戏建模:手绘暗黑小萝莉「建议收藏」

    平时喜欢画画,最近呐再做一些个人作品。然后再A站各种淘原画,从一堆原画中挑选自己喜欢的,把它画成模型。然后发现选的原画每次都给自己挖了很多的坑。在选这张原画的时候想的是,小萝莉卡哇伊。一身金闪闪发光blingbling的,贼漂酿。头发直接就是一个条一个条的,全身除了头上的装饰还有肩部的就没啥了,还是ok的。但是在实际的模型制作还有贴图制作中发现,emmmm,有一个深坑,快爬不出来了。谁来救一下可爱的小哥哥。下面呐就是我选的卡哇伊小姐姐。挑战一下这种非正常肤色。(图1原画)下面呐…

  • Laravel 修改默认日志文件名称和位置

    Laravel 修改默认日志文件名称和位置

    2021年10月23日
  • java 有哪些关键字_JAVA的常用关键字有哪些?「建议收藏」

    java 有哪些关键字_JAVA的常用关键字有哪些?「建议收藏」JAVA的常用关键字有哪些?发布时间:2020-05-2521:46:00来源:亿速云阅读:133作者:鸽子下表是java中经常会用到的关键字:一:用于定义访问权限修饰符的关键字:1)public公共的public关键字是可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。可能只会在其他任何类或包中引用public类、方法或字段。2)protected受保护的prot…

  • pycharm 换行_pycharm自动换行快捷键

    pycharm 换行_pycharm自动换行快捷键python脚本有时一行代码写的非常长,一个屏幕塞不下,左右拉动滚动条视觉不友好。第一种方法:python里有换行标识”\”,如jfdb=spark.read.format(“jdbc”).option(“driver”,mysql_driver).option(“url”,mysql_url).option(“dbtable”,”xxxxxxxxxxxxxxxxxxxxxxxx”).option(“user”,mysql_acount).option(“password”,mysql_pa

发表回复

您的电子邮箱地址不会被公开。

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