从我的内核模块中,我想遍历任务列表并对设置了我的任务->标志的所有进程执行一些休眠操作。我知道通过持有 read_lock(tasklist_lock)/rcu_read_lock,我不应该做任何昏昏欲睡的操作。所以我编码如下:
1.获取读锁
2.迭代任务(for_each_process)
3.如果我的标志被设置,我解锁tasklist_lock和get_task_struct
4.然后我执行休眠操作
5.Put_task_struct
6.再次获取read_lock(&tasklist_lock);
7.循环继续
read_lock(&tasklist_lock);
for_each_process(c) {
if (c->my_flag) {
read_unlock(&tasklist_lock);
get_task_struct(c);
...
Do some sleepy_operation()
...
put_task_struct(c);
read_lock(&tasklist_lock);
}
}
请让我知道我的方法是否正确