2

从我的内核模块中,我想遍历任务列表并对设置了我的任务->标志的所有进程执行一些休眠操作。我知道通过持有 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);

            }
    }

请让我知道我的方法是否正确

4

0 回答 0