当前位置:  技术问答>linux和unix

select/sleep函数难道不能够被一个进程中的多个线程调用?

    来源: 互联网  发布时间:2016-12-26

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

我在一个进程中,有三个线程,其中有两个线程需要延时自己。
请问可以在这两个线程中均调用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会不会被抢占,这个不好说,跟不同的系统有关。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Select和listen函数的区别
  • select函数。
  • 请教select函数
  • 秒爆,求教育,求解释,linux 的select()函数
  • 关于select函数返回错误的处理
  • select函数的问题
  • win32下的select函数可以监听文件句柄吗?
  • select函数问题?
  • select函数
  • 请教套接字中的select()函数问题
  • Linux 中 select 函数问题 !!!!!!!!!!!!!!
  • 请问使用SELECT()函数怎么监测串口发送数据?
  • 关于Select()函数。
  • 关于select函数中struct timeval问题
  • HTML教程 iis7站长之家
  • 关于select()函数的用法
  • select函数的作用是什么呢?谢谢
  • 我做了个socket服务器,但是客户端接收数据的时候用select()函数????可接受不到
  • select函数疑问
  • 为什么作了信号处理之后select函数就不能正常工作了?
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selected定义及介绍
  • 究竟怎么样取得的<select name="select_user" size="8" multiple>值
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selectable定义及介绍
  • man select 结果返回 No manual entry for select
  • java命名空间javax.swing.tree类defaulttreeselectionmodel的类成员方法: selection定义及介绍
  • select <0时调用exit(0),为什么程序没有退出,而是继续执行select了?
  • java命名空间javax.swing.tree类defaulttreecellrenderer的类成员方法: selected定义及介绍
  • insert into select和select into的使用和区别介绍
  • java命名空间java.awt.event类itemevent的类成员方法: selected定义及介绍
  • JDBC里select sum和select返回的字段类型不一样
  • java命名空间javax.swing类defaultbuttonmodel的类成员方法: selected定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3