博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程调度API之yield
阅读量:4214 次
发布时间:2019-05-26

本文共 938 字,大约阅读时间需要 3 分钟。

void __sched yield(void) 用于让当前进程释放其占用的cpu资源,以便让其他进程有机会执行.但是kernel 并不推荐直接调用这个函数其使用的例子如下:static u16 hfa384x_allocate_fid(struct net_device *dev, int len){	u16 fid;	unsigned long delay;	delay = jiffies + HFA384X_ALLOC_COMPL_TIMEOUT;	while (!(HFA384X_INW(HFA384X_EVSTAT_OFF) & HFA384X_EV_ALLOC) &&	       time_before(jiffies, delay))		yield();}其源码分析如下:可见这个函数主要做了两件事情void __sched yield(void){#虽然让出cpu了,但是当前task的状态还是设置为TASK_RUNNING	set_current_state(TASK_RUNNING);#调用系统调用来让出cpu,其实在这个系统调用中是直接调用schedule 函数	sys_sched_yield();}SYSCALL_DEFINE0(sched_yield){	struct rq_flags rf;	struct rq *rq;	local_irq_disable();	rq = this_rq();	rq_lock(rq, &rf);	schedstat_inc(rq->yld_count);	current->sched_class->yield_task(rq);	/*	 * Since we are going to call schedule() anyway, there's	 * no need to preempt or enable interrupts:	 */	preempt_disable();	rq_unlock(rq, &rf);	sched_preempt_enable_no_resched();#这个系统调用的核心就是调用schedule来让出cpu	schedule();	return 0;}

转载地址:http://hejmi.baihongyu.com/

你可能感兴趣的文章
《浪潮之巅》1 AT&T
查看>>
《浪潮之巅》2蓝色巨人 IBM公司
查看>>
《浪潮之巅》3水果公司的复兴
查看>>
《浪潮之巅》4计算机工业的生态链
查看>>
《浪潮之巅》5奔腾的芯 英特尔公司
查看>>
《浪潮之巅》7 互联网的金门大桥 -—思科公司
查看>>
《浪潮之巅》8英名不朽---杨致远、菲洛和雅虎公司
查看>>
《浪潮之巅》9硅谷的见证人———惠普公司
查看>>
优秀的人都将是孤独的
查看>>
android 实现摇一摇功能
查看>>
android 侧滑事件的监听
查看>>
创新中国总决赛之行
查看>>
当你厌恶一个人时,你要想一下你是否也是这样的一个人
查看>>
android 数据库sqlite的使用
查看>>
android 腾讯信鸽的使用
查看>>
Android 闹钟的实现详解
查看>>
Android 实现底部导航栏
查看>>
大二新学期开始
查看>>
java 中的集合
查看>>
Html 标签学习
查看>>