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

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

cond_resched() 用于让出cpu给其他进程运行,相对于yield函数,这个函数使用更为广泛一点.其使用的例程如下:void *hpfs_map_sector(struct super_block *s, unsigned secno, struct buffer_head **bhp,		 int ahead){	struct buffer_head *bh;	hpfs_lock_assert(s);	hpfs_prefetch_sectors(s, secno, ahead);	cond_resched();#让出cpu后,下一次执行时从这里开始.	*bhp = bh = sb_bread(s, hpfs_search_hotfix_map(s, secno));	if (bh != NULL)		return bh->b_data;	else {		pr_err("%s(): read error\n", __func__);		return NULL;	}}其源码分析如下:#define cond_resched() ({			\	___might_sleep(__FILE__, __LINE__, 0);	\ #调用这个函数的thread 不能sleep,如果发生sleep的时候,___might_sleep 会打印处callstack	_cond_resched();			\ #调用此函数让出cpu})_cond_resched 成功让出cpu,返回1,失败的返回0,但是我们一般不关心这个返回值int __sched _cond_resched(void){#检测此thread 是否符合被抢占的条件,这个函数之前的博文分析过	if (should_resched(0)) {#让出cpu		preempt_schedule_common();		return 1;	}	return 0;}static void __sched notrace preempt_schedule_common(void){	do {		preempt_disable_notrace();		preempt_latency_start(1);#核心是通过时调用__schedule 来让出cpu		__schedule(true);		preempt_latency_stop(1);		preempt_enable_no_resched_notrace();		/*		 * Check again in case we missed a preemption opportunity		 * between schedule and now.		 */	} while (need_resched());}

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

你可能感兴趣的文章
Conclusion for Resource Management
查看>>
Conclusion for Constructors,Destructors,and Assignment Operators
查看>>
Conclusion for Accustoming Yourself to C++
查看>>
面试题1:赋值运算函数(offer)
查看>>
面试题15:在O(1)时间删除链表结点
查看>>
面试题16:调整数组顺序使奇数位于偶数前面
查看>>
面试题17:链表中倒数第k个结点(offer)
查看>>
面试题18:反转链表
查看>>
面试题19:合并两个排序的链表(offer)
查看>>
QT之局域网聊天实现
查看>>
poco之文件系统
查看>>
QT实现记录上一次用户名和密码功能
查看>>
QT通过按钮browse文件夹
查看>>
GetUdpTable获得UDP端口使用信息
查看>>
QtCharts动态的显示折线图
查看>>
生成Send Report的rtcp包接口
查看>>
docker使用
查看>>
代理模式
查看>>
笔记--STM32F407调试BQ4050--SMBUS通信
查看>>
额温枪怎么开发?经验分享。
查看>>