博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中断API之tasklet_init/tasklet_kill
阅读量:4213 次
发布时间:2019-05-26

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

void tasklet_init(struct tasklet_struct *t,void (*func)(unsigned long), unsigned long data)用于初始化一个tasklet.其源码分析如下:void tasklet_init(struct tasklet_struct *t,		  void (*func)(unsigned long), unsigned long data){	t->next = NULL;	t->state = 0;	atomic_set(&t->count, 0);	t->func = func;	t->data = data;}可以看到tasklet_init 主要就是给tasklet_struct 结构体的成员变量赋值为形参.tasklet_kill 则用于清掉tasklet_struct成员变量的state的TASKLET_STATE_SCHED位。来禁止这个tasklet被调度运行.void tasklet_kill(struct tasklet_struct *t){	#tasklet_kill 可以被用于中断环境中,且如果是中断环境中则打印下面的log.	if (in_interrupt())		pr_notice("Attempt to kill tasklet from interrupt\n");	#返回state的值,state的值只能是	#enum	#	{	#	TASKLET_STATE_SCHED,	/* Tasklet is scheduled for execution */	#	TASKLET_STATE_RUN	/* Tasklet is running (SMP only) */	#	};	#也就是只能是0或者1.如果返回TASKLET_STATE_SCHED的话,也就是说这个tasklet没有	#被运行,这个while循环不成立。如果state的原来的状态就是TASKLET_STATE_RUN,则这个	#while 循环成立,进入到内循环中判断state是否被已经是TASKLET_STATE_SCHED,如果是的话,则退出	#内循环,这个时候外循环也就退出了	#		while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) {		do {			yield();		} while (test_bit(TASKLET_STATE_SCHED, &t->state));	}	#等待这个tasklet 被执行	tasklet_unlock_wait(t);	#清理tasklet中的TASKLET_STATE_SCHED 位	clear_bit(TASKLET_STATE_SCHED, &t->state);}

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

你可能感兴趣的文章
【Big Data 每日一题20180928】Structured Streaming 之 Watermark 解析
查看>>
【Big Data 每日一题20180929】Spark DAG概述
查看>>
【Big Data 每日一题 - 20180930】Spark启动时的master参数以及Spark的部署方式
查看>>
【Big Data 每日一题20181001】java 深拷贝 方案 (中英版)
查看>>
JNI Java Native Interface
查看>>
阅读源码的三种境界 (转 码农翻身 微信公众号)
查看>>
All Things OpenTSDB
查看>>
表格存储最佳实践:一种用于存储时间序列数据的表结构设计
查看>>
OpenTSDB介绍
查看>>
OpenTSDB原理系列:元数据模型
查看>>
解密OpenTSDB的表存储优化
查看>>
OpeTSDB的Configuration配置
查看>>
FQDN
查看>>
时序数据库
查看>>
jmxtrans+influxdb+granafa监控hbase
查看>>
使用jmxtrans监控Spark JVM信息到grafana显示
查看>>
HBase - ROOT 和 META 表结构 (region定位原理)
查看>>
HBase API 和 基本操作
查看>>
Hbase的存储模型
查看>>
InfluxDB influxdbc.conf配置文件详解
查看>>