1. 程式人生 > >Linux並發與同步專題

Linux並發與同步專題

當前 導致 包括 更新 原子 url itl cnblogs 靜態局部變量

並發訪問:多個內核路徑同時訪問和操作數據,就有可能發生相互覆蓋共享數據的情況,造成被訪問數據的不一致。

臨界區:訪問和操作共享數據的代碼段。

並發源:訪問臨界區的執行線程或代碼路徑。

在內核中產生並發訪問的主要有如下4種:

  • 中斷和異常:中斷發生後,中斷處理程序和被中斷的進程之間有可能產生並發訪問。中斷<==>被中斷的線程
  • 軟中斷和tasklet:軟中斷或者tasklet隨時可能會被調度執行,從而打斷當前正在執行的進程上下文。軟中斷<==>進程上下文
  • 內核搶占:調度器支持可搶占特性,會導致進程和進程之間的並發訪問。進程<==>進程
  • 多處理器並發執行:多處理器上可以同時運行多個進程。A處理器進程<==>B處理器進程

對於單處理器系統,主要有一下並發源:(硬中斷 > 軟中斷和tasklet > 進程上下文)

  • 中斷處理程序可以打斷軟中斷、tasklet和進程上下文。
  • 軟中斷和tasklet之間不會並發,但是可以打斷進程上下文的執行。
  • 在支持搶占的內核中,進程上下文之間會並發。
  • 在不支持搶占的內核中,進程上下文之間不會產生並發。

對於SMP系統,有如下並發情況:

  • 同一類型的中斷處理程序不會並發,但是不同類型的中斷有可能送達到不同的CPU上,因此不同類型的中斷處理程序可能會存在並發執行。
  • 同一類型的軟中斷會在不同的CPU上並發執行。
  • 同一類型的tasklet是串行執行的,不會在多個CPU上並發。
  • 不同CPU上的進程上下文會並發。

並發保護的是資源或者數據,而不是保護代碼;包括靜態局部變量、全局變量、共享的數據結構、緩存、鏈表、紅黑樹等各種形式的資源數據。

下面是本專題展開的章節:

《Linux並發與同步專題 (1)原子操作和內存屏障》

《Linux並發與同步專題 (2)spinlock》

《Linux並發與同步專題 (3) 信號量》

《Linux並發與同步專題 (4) Mutex互斥量》

《Linux並發與同步專題 (5) 讀寫鎖》

《Linux並發與同步專題 (6) RCU》

《Linux並發與同步專題 (7) 內存管理中的鎖》

《Linux並發與同步專題 (8) 最新更新與展望》

Linux並發與同步專題