我在一个进程中,有三个线程,其中有两个线程需要延时自己。
请问可以在这两个线程中均调用sleep函数实现延时功能吗?
其中一个线程在调用sleep的时候会被另一个线程抢占吗?
如果抢占了,那么计时器会不会产生冲突?

另外采用
select(0,NULL,NULL,NULL,&tm);
实现延时的时候,可以多次这样子调用并且和sleep函数一起使用吗?

select(0,NULL,NULL,NULL,&tm);
这种延时的机制是什么?它有没有间接调用sleep?

问题有点多,谢谢!

Q1. 请问可以在这两个线程中均调用sleep函数实现延时功能吗?
A1. 能

Q2. 其中一个线程在调用sleep的时候会被另一个线程抢占吗?
A2. 不会,无论LinuxThread还是NPTL线程模型都能帮你解决此类基本问题

Q3. 如果抢占了,那么计时器会不会产生冲突?
A3. 假设不成立

Q4. 另外采用
select(0,NULL,NULL,NULL,&tm);
实现延时的时候,可以多次这样子调用并且和sleep函数一起使用吗?
A4. 可以但没必要,既然只需要select的sleep功能,直接调用sleep/usleep/nanosleep就好了,这几个sleep实际最终调用的都是nanosleep

Q5. select(0,NULL,NULL,NULL,&tm);
这种延时的机制是什么?它有没有间接调用sleep?
A5. 内核执行在你应用程序的上下文,因为全部fds都是空,所以内核只在一个循环里不断释放控制权(调度),直到当前时间>=超时时间为止,此时将控制权返回给你的程序,所以并未调用glibc的*sleep,只是内核的实现机制有些类似。

注意:*sleep/select会受信号量(signal)影响提前退出,所以应用程序看到*sleep/select返回还要确认是正常返回(等待时间到达)还是中断返回。如果中断返回,sleep返回剩余等待时间,usleep、nanosleep和select返回-1加errno=EINTR

sleep与select函数相关推荐

  1. R语言dplyr包使用select函数通过索引查询或者排除数据列实战(Select Columns by Index)

    R语言dplyr包使用select函数通过索引查询或者排除数据列实战(Select Columns by Index) 目录

  2. socket通信时如何判断当前连接是否断开--select函数,心跳线程,QsocketNotifier监控socket...

    client与server建立socket连接之后,如果突然关闭server,此时,如果不在客户端close(socket_fd),会有不好的影响: QsocketNotifier监控socket的槽 ...

  3. 关于select函数

    1.阻塞模式下必须开多线程来解决阻塞问题,但是为每个socket开了多线程后,多线程的运行开销很大,速度超级慢. 如果,多线程的速度能跟得上,那是非常不错.但是事实上可能并非如此. 2.因此selec ...

  4. UNIX中的Select函数

    表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unistd.h> 定义函数 int sel ...

  5. select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)

    select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型, 原型: int select(int maxfd,fd_set *rds ...

  6. form select multiple 某个字段是数组_你知道什么是Select函数吗?

    Select函数:允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它. select man手册 举个栗子,我们可以调用Select,告诉内核仅仅在 ...

  7. linux 下 select 函数的用法

    一.Select 函数详细介绍 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect. accept.recv ...

  8. SOCKET编程中,select()函数的作用

    SOCKET编程中,select()函数的作用Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accep ...

  9. 多路 IO 转接 :select 函数

    (1)头文件: #include <sys/select.h> (2)函数原型: int select( int nfds, fd_set *readfds, fd_set *writef ...

  10. step5 . day6 网络编程 基于TCP协议的多并发模式(使用多进程、多线程、select函数分别实现)...

    实现TCP服务器端多路并发的方法有①多进程②多线程③IO多路复用(select poll epoll函数) 1.多进程实现并发模式(仅在服务器端更改之前代码实现) 服务器端 #include < ...

最新文章

  1. 一张自拍变6种风格漫画,视频也支持,全程稳定不“掉线”,这个AI不到一天狂揽1800赞...
  2. 精华阅读第 10 期 |解开阿尔法狗(AlphaGo)人工智能的画皮
  3. SSH免密码登录命令无法生效?直接复制粘贴也可以!
  4. hdu2489 Minimal Ratio Tree
  5. spring aop实现日志收集
  6. 指针(Pointer)
  7. 评估数据库存储引擎的黄金三角
  8. 【实践】Pytorch nn.Transformer的mask理解
  9. Spring Bean生命周期-prepareRefresh(二)
  10. 手机APP项目测试点总结
  11. 电子专业必懂的焊接知识与技能!
  12. matlab 三维数组 二维,matlab三维数组变二维
  13. 写个鸭子类方法java_小黄鸭系列java基础知识 | Java基本语法
  14. 什么是埋点?我们为什么需要埋点?(原作者:知乎 原志Growing)
  15. 利用adb卸载手机预装软件(系统软件)
  16. 如何运用Microsoft Office Project 2003来做项目计划
  17. win10,win11 下部署Vicuna-7B,Vicuna-13B模型,gpu cpu运行
  18. 浅谈char类型范围
  19. GEE:两种遥感影像的中值合成方法
  20. 示波器合成信号用matlab,用宽带示波器进行雷达信号的矢量分析

热门文章

  1. 浅谈大数据的标签管理
  2. 如何拍出展现人物内心境况的照片
  3. python代码提示expected_Expected conditions模块使用方法汇总代码解析
  4. 日本語:日常会话7-スイーツ【すいーつ】店
  5. HTML5期末大作业:生鲜水果蔬菜商城网站设计——天天生鲜水果蔬菜商城(10页) html网页设计期末大作业_网页设计平时作业
  6. 通过 Java 代码获取 JVM 参数
  7. 串行RapidIO(Serial RapidIO,SRIO):简介及内容导航
  8. python中停车收费问题_如何用Python识别停车位?
  9. 红米note9调试微信小程序蓝牙,无法搜索到任何设备
  10. Oracle function 等的实际用法与书中的差异