read_un / lock(& tasklist_lock)的意义

时间:2012-04-05 00:41:04

标签: c linux architecture linux-kernel

在跟随等待系统调用的路径时,注意到在调用之前 do_wait_thread我们得到tasklist_lock。我试图理解其意义 of tasklist_lock&适合使用的地方。

716        read_lock(&tasklist_lock);
1717        tsk = current;
1718        do {
1719                retval = do_wait_thread(wo, tsk);
1720                if (retval)
1721                        goto end;
1722
1723                retval = ptrace_do_wait(wo, tsk);
1724                if (retval)
1725                        goto end;
1726
1727                if (wo->wo_flags & __WNOTHREAD)
1728                        break;
1729        } while_each_thread(current, tsk);
1730        read_unlock(&tasklist_lock);

我查看了tasklist_lock的声明,如下所示。

/*
 251 * This serializes "schedule()" and also protects
 252 * the run-queue from deletions/modifications (but
 253 * _adding_ to the beginning of the run-queue has
 254 * a separate lock).
 255 */
 256 extern rwlock_t tasklist_lock;
 257 extern spinlock_t mmlist_lock;

我无法理解我们应该在哪里使用它。你能告诉我这个吗? 感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

循环遍历当前任务的每个线程。保持任务列表锁定可确保在循环运行时这些线程都不会消失。