c语言性别用什么数据类型用函数输入一个年龄判断是否属羊?

sleep函数会陷入到操作系统内核,内核中对它的实现就是信号可中断的,就是说来了信号这个sleep操作就被打断,被打断后sleep就随即返回,不会等时间到。

for循环里面啥都没做吗?就是死循环?当然不会退出。但会消耗大量CPU周期,也更耗电,不建议使用。

可以在for循环中调用sleep,就是对sleep的反复调用。既不会结束,也不会消耗很多CPU周期。

}

linux内核里面进程主动进入阻塞态分为两种情况,一种情况是主动睡眠就是sleep这种方式进入,另一种是被动阻塞,通常是等待某种资源。这两种情况,进程都会让出CPU,但是主动睡眠是可以被信号唤醒的,唤醒后就会进入就绪态,这时候还是没有真正得到CPU来运行,等到没有更高优先级的进程或前面没有同优先级的进程的时候,就会进入运行态,这时候就真正的醒来了,得到CPU开始继续运行,本次睡眠彻底结束,如果还要睡,就需要再次调用sleep。被动阻塞的例子是等待信号量,或读取阻塞模式的管道,除非自己超时或者等待的资源可用,否则信号是没法唤醒它的。

这么说可能太抽象,举个例子,一个码农晚上失眠,好不容易属羊睡着了,老板一个电话让起来改BUG,这时候程序还能继续睡?猿肯定是马上跳起来改BUG。至于BUG改完,还想继续睡,那只能再次数羊(再次调用sleep)。如果老板提前交代了,让晚上等电话,就叫被动阻塞。这种情况除了老板来电话,天王老子来了也继续睡。

不过,不管是主动睡眠还是被动阻塞,唤醒了就是唤醒了,意味着进程从内核态切换到用户态去执行了,如果要继续睡,就意味着从用户态又切换到内核态,也就是再次调用睡眠系统调用。(注意一个是主动让出CPU,一个是被剥夺了CPU,是不一样的)

至于你说的for循环被信号中断后还可以继续运行,这种不属于主动让出CPU,内核会保护现场,等信号处理完后,自动恢复现场,也就是接着运行。

不知道有没有帮助到你?如果还有不明白的,或者对我的回答有质疑的,欢迎继续讨论,我会帮你找到相关资料,彻底解开你的疑惑。

}

sleep函数会陷入到操作系统内核,内核中对它的实现就是信号可中断的,就是说来了信号这个sleep操作就被打断,被打断后sleep就随即返回,不会等时间到。

for循环里面啥都没做吗?就是死循环?当然不会退出。但会消耗大量CPU周期,也更耗电,不建议使用。

可以在for循环中调用sleep,就是对sleep的反复调用。既不会结束,也不会消耗很多CPU周期。

}

我要回帖

更多关于 c语言性别用什么数据类型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信