第十二章 併發程式設計

2022-08-18 07:03:16 字數 1488 閱讀 1296

1、併發:邏輯控制流在時間上重疊

2、併發程式:使用應用級併發的應用程式稱為併發程式。

3、三種基本的構造併發程式的方法:

(1)需要乙個sigchld處理程式,來**僵死子程序的資源。

(2)父子程序必須關閉各自的connfd拷貝。對父程序尤為重要,以避免儲存器洩露

(3)套接字的檔案表表項中的引用計數,直到父子程序的connfd都關閉了,到客戶端的連線才會終止。

優點:乙個程序不可能不小心覆蓋兩個程序的虛擬儲存器。

unix ipc是指所有允許程序和同一臺主機上其他程序進行通訊的技術,包括管道、先進先出(fifo)、系統v共享儲存器,以及系統v訊號量。

(1)比基於程序的設計給了程式設計師更多的對程式行為的控制

(2)執行在單一程序上下文中,因此,每個邏輯流都能訪問該程序的全部位址空間,使得流之間共享資料變得很容易。

(3)不需要程序上下文切換來排程新的流。

(1)執行緒的上下文切換要比程序的上下文切換快得多;

(2)和乙個程序相關的執行緒組成乙個對等池,獨立於其他執行緒建立的執行緒。

(3)主線程和其他執行緒的區別僅在於它總是程序中第乙個執行的執行緒。

(1)乙個執行緒可以殺死它的任何對等執行緒;

(2)等待它的任意對等執行緒終止;

(3)每個對等執行緒都能讀寫相同的共享資源。

1、共享變數引入了同步錯誤的可能性。

2、執行緒i的迴圈**分解為五部分:

hi:在迴圈頭部的指令塊 

li:載入共享變數cnt到暫存器%eax的指令,%eax表示執行緒i中的暫存器%eax的值

ui:更新(增加)%eax的指令

si:將%eaxi的更新值存回到共享變數cnt的指令

ti:迴圈尾部的指令塊。

寫順序程式只有一條邏輯流,寫併發程式有多條併發流,並行程式是乙個執行在多個處理器上的併發程式。並行程式的集合是併發程式集合的真子集。

1、執行緒安全:當且僅當被多個併發執行緒反覆地呼叫時,它會一直產生正確的結果。

執行緒不安全:如果乙個函式不是執行緒安全的,就是執行緒不安全的。

2、執行緒不安全的類:

(1)不保護共享變數的函式

(2)保持跨越多個呼叫的狀態的函式。

(3)返回指向靜態變數的指標的函式。解決辦法:重寫函式和加鎖拷貝。

(4)呼叫執行緒不安全函式的函式。

12.7.5 死鎖

1、死鎖:一組執行緒被阻塞了,等待乙個永遠也不會為真的條件。 

2、程式設計師使用p和v操作不當,以至於兩個訊號量的禁止區域重疊。

3、重疊的禁止區域引起了一組稱為死鎖區域的狀態。

4、死鎖是不可**的。

第十二章 併發程式設計

構建併發伺服器的方法 在父程序中接收客戶端連線請求,然後建立乙個新的子程序來為每個新客戶端提供服務。假設現在有兩個客戶端和乙個伺服器,伺服器正在監聽乙個監聽描述符上的連線請求。併發過程如下 1 伺服器接受客戶端1的連線請求 2 伺服器派生乙個子程序為這個客戶端1服務 3 伺服器接受另乙個客戶端2的連...

Objective C 程式設計 第十二章

預處理程式語句使用 開頭,一行中的第乙個非空字元。大部分內容都與c語言類似,相當於複習啦。預定義不是變數。不能為它賦值。實際上是字元的簡單替換。define語句常放在 import或 include語句後邊。定義乙個名稱後,可以在任何地方使用。一般放在標頭檔案,方便在多個原始檔中使用。所有預定義的名...

CSAPP讀書日記 第十二章 併發程式設計

構造併發程式的方法 構造併發程式最簡單的方法就是用程序,使用像fork exec和waitpid之類的函式。特點 父子程序之間共享檔案表,但是不共享使用者位址空間。優點 乙個程序不會覆蓋另乙個程序的虛擬記憶體。缺點 程序共享狀態資訊變得困難,必須使用顯式的ipc 程序間通訊 機制。結果就是這種設計方...