文章目录
一、init_kthread_worker()宏
include/linux/kthread.h
初始化 kthread_worker 结构体
#define init_kthread_worker(worker) \
do {
\
static struct lock_class_key __key; \
__init_kthread_worker((worker), "("#worker")->lock", &__key); \
} while (0)
1、__init_kthread_worker()函数
include/linux/kthread.h
void __init_kthread_worker(struct kthread_worker *worker,
const char *name,
struct lock_class_key *key)
{
memset(worker, 0, sizeof(struct kthread_worker));
// 初始化自旋锁
spin_lock_init(&worker->lock);
lockdep_set_class_and_name(&worker->lock, key, name);
// 初始化链表结点
INIT_LIST_HEAD(&worker->work_list);
// 初始化链表结点
INIT_LIST_HEAD(&worker->delayed_work_list);
}
二、kthread_worker_fn()函数
kernel/kthread.c
int kthread_worker_fn(void *worker_ptr)
{
// 指针类型转化
struct kthread_worker *worker = worker_ptr;
struct kthread_work *work;
...
// current是内核的一个全局变量,专门用来表示当前运行的进程或者线程
// 当某个线程运行这个函数时,线程会被保存到task指针
worker->task = current;
if (

本文详细介绍了 Linux 内核中的 kthread 工作机制,包括 init_kthread_worker 宏初始化 kthread_worker 结构体的过程,kthread_worker_fn 函数如何处理任务,init_kthread_work 宏初始化 kthread_work 结构体的方法,kthread_queue_work 函数如何把工作项加入到 worker 的队列中,以及 kthread_flush_worker 函数用于清理 worker 队列。
最低0.47元/天 解锁文章
789

被折叠的 条评论
为什么被折叠?



