2012-04-05 51 views
1

在等待系統調用的下列路徑時,注意到在調用 do_wait_thread之前,我們得到了tasklist_lock。我試圖瞭解其適合使用的tasklist_lock &的意義 。read_un/lock的含義(&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; 

我無法理解我們應該在哪裏使用它。你能否讓我知道這件事。 感謝您的幫助。

回答

2

循環遍歷當前任務的每個線程。保持任務列表鎖確保這些線程在循環運行時不會消失。