1.當多個線程訪問共享硬件或軟件資源的任什麼時候候,因爲線程之間可能產生對資源的不一致觀察,因此必須顯式管理對資源的訪問。併發
2.內核中的併發管理設施:spa
(1). 信號量: P操做將信號量的值減 1 ,判斷值是否大於 0 ,若是大於 0 的話,進程繼續執行。不然進入阻塞隊列等待被喚醒。線程
V操做將信號量的值加 1, 判斷值是否小於 0 ,若是小於 0 的話,首先喚醒被阻塞的進程,而後退出,不然直接退出。指針
(2). 互斥體: 用於互斥的信號量。隊列
(3). 讀寫信號量: 容許多個併發的讀,並對寫進行互斥,且寫的優先級比讀的優先級高。進程
(4). 完成量: 在當前線程以外初始化一個活動, 而後在當前進程中等待完成,而活動完成後操做完成量,通知活動的完成。資源
(5). 自旋鎖:進程嘗試得到自旋鎖,若是得到成功,則進程繼續執行,若是自旋鎖被別的進程佔用,則該進程進入忙循環並重複檢查 這個鎖,直到該鎖可用爲止。變量
注意: 擁有自旋鎖的代碼都必須是原子的,它不能由於任何緣由放棄處理器,特指當別的任何上下文有對自旋鎖的操做時。軟件
(6). 原子變量:原子變量的操做由單個機器指令來操做。循環
(7). 順序鎖:保護的資源不多,很簡單,會頻繁訪問並且寫入訪問不多發生且必須快速。讀取者須要檢測是否和寫入者發生衝突,當發生衝突時就須要重試對資源的訪問。
(8). RCU 讀取-複製-更新: 在須要修改數據時,寫入線程首先複製,而後修改副本,以後用新的版本替代相關指針。替換的時機是老的版本上沒有其餘引用時。