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

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

void preempt_count_add(int val) 用于增加当前进程的引用计数,这样可以避免当前进程被抢占与之对应的是void preempt_count_sub(int val)用来当前进程的引用计数,这样当引用计数为0时,当前进程就可以被抢占.这两个函数是一对的,一般一起使用其使用的例程如下:#define __irq_enter()					\	do {						\		account_irq_enter_time(current);	\		preempt_count_add(HARDIRQ_OFFSET);	\		trace_hardirq_enter();			\	} while (0)/* * Exit irq context without processing softirqs: */#define __irq_exit()					\	do {						\		trace_hardirq_exit();			\		account_irq_exit_time(current);		\		preempt_count_sub(HARDIRQ_OFFSET);	\	} while (0)	可以看到在进入irq是调用preempt_count_add 来增加引用计数避免被抢占,离开irq是调用preempt_count_sub 来减少引用计数使能抢占其源码分析如下:void preempt_count_add(int val){#ifdef CONFIG_DEBUG_PREEMPT	/*	 * Underflow?	 */	if (DEBUG_LOCKS_WARN_ON((preempt_count() < 0)))		return;#endif	__preempt_count_add(val);#ifdef CONFIG_DEBUG_PREEMPT	/*	 * Spinlock count overflowing soon?	 */	DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >=				PREEMPT_MASK - 10);#endif	preempt_latency_start(val);}假定不打开CONFIG_DEBUG_PREEMPT的话,则preempt_count_add 中首先调用__preempt_count_add 来增加引用计数,然后调用preempt_latency_start 来开始Start timing the latency.这个has如果没有定义CONFIG_DEBUG_PREEMPT 和 CONFIG_PREEMPT_TRACER的话,也等同于空函数.void preempt_count_sub(int val){#ifdef CONFIG_DEBUG_PREEMPT	/*	 * Underflow?	 */	if (DEBUG_LOCKS_WARN_ON(val > preempt_count()))		return;	/*	 * Is the spinlock portion underflowing?	 */	if (DEBUG_LOCKS_WARN_ON((val < PREEMPT_MASK) &&			!(preempt_count() & PREEMPT_MASK)))		return;#endif	preempt_latency_stop(val);	__preempt_count_sub(val);}假定不打开CONFIG_DEBUG_PREEMPT的话,则ppreempt_count_sub 中首先调用preempt_latency_stop 来Stop timing the latency来增加引用计数,然后调用preempt_latency_start 来开始然后调用__preempt_count_sub 来减少当前进程的引用计数,如果医用计数是0的话,则使能进程抢占.

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

你可能感兴趣的文章
【屌丝程序的口才逆袭演讲稿50篇】第七篇:请留意我们身边的风景 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第八篇:坚持的力量 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第九篇:春节那些事-过年回家不需要理由【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十篇:程序员们请看看外面的世界吧【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十一篇:马云乌镇40分钟演讲实录【张振华.Jack】
查看>>
Java并发编程从入门到精通 张振华.Jack --我的书
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十二篇:世界上最快的捷径【张振华.Jack】
查看>>
Android中Java代码和XML布局效率问题
查看>>
android TextView属性大全(转)
查看>>
Conclusion for Resource Management
查看>>
Conclusion for Constructors,Destructors,and Assignment Operators
查看>>
Conclusion for Accustoming Yourself to C++
查看>>
面试题1:赋值运算函数(offer)
查看>>
Mark : MessagePack简介及使用
查看>>
Mark : Hadoop Raid-实战经验总结
查看>>
Structured Streaming 实现思路与实现概述
查看>>
Apache Spark 2.2.0 中文文档 - Structured Streaming 编程指南 | ApacheCN
查看>>
Mark:大数据最佳学习路线
查看>>
Spark 多线程模型
查看>>
编程第一性原则
查看>>