linux下怎么实现线程的定时抢占?
可以用alarm信号做:alarm(设置信号传送闹钟)相关函数 signal,sleep表头文件 #include<unistd.h>定义函数 unsigned int alarm(unsigned int seconds);函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。返回值返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。#include<unistd.h>#include<signal.h>void handler() { //这里读跳变次数}main(){int i;signal(SIGALRM,handler)
;//这里设置时钟信号的响应函数alarm(1)
; //这里设置每一秒钟发送一个时钟信号}
linux什么时候调度线程?
那情形可多了去了。
正常情况下,定时器中断到来的时候,如果当前进程时间片用尽,就要调度; 其他中断到来的时候,要进行调度,陷入内核; 进程主动要求调度的时候(如fork新线程、睡眠等等),要进行调度; 程序运行产生异常,无法继续运行,内核处理完异常恢复运行也要进行调度。还有其它各种情况,我一时也无法总结全,总之,内核“一言不和”就要进行调度……