併發的同步互斥與死鎖

2021-10-01 22:26:48 字數 3671 閱讀 6832

程式執行的順序性

程式執行的併發性

與時間有關的錯誤

程序的協作和競爭

協作:某些併發程序為完成同一任務而共享某些資料,形成協作關係

互斥與同步的區別

臨界區排程原則

臨界區管理的peterson演算法

bool inside[2]

;inside[0]

= false;

inside[1]

= true;

enum

turn;

cobegin

process p0()

inside[0]

= false;

} process p1()

inside[0]

= false;

}coend

硬體設施

ts指令

ts

(x)else

}bool s = true;

cobegin

process pi()

s = true;

}coend

對換指令

bool lock=false;

cobegin

process pi()

while

(keyi)

;//上鎖

;swap

(keyi,lock)

;//開鎖

}coend

同步與同步機制

訊號量與pv操作

操作含義

利用訊號量實現互斥

semaphore mutex =

1cobegin

process pi()

v(mutex);}

coend

利用訊號量實現同步
semaphore fork[5]

;semaphore four =4;

for(

int i =

0; i <

5; fork[i ++]=

1);cobegin

process pi

(int i)

}coend

semaphore fork[5]

;for

(int i =

0; i <

5; fork[i ++]=

1);cobegin

process pi

(int i)

else}}

coend

semaphore fork[5]

;semaphore mutex =1;

for(

int i =

0; i <

5; fork[i ++]=

1);cobegin

process pi

(int i)

}coend;

生產者消費者

item b[k]

;// 緩衝池,共有k個緩衝區,臨界資源

semaphore empty = k;

//空緩衝區個數

semaphore full =0;

// 滿緩衝區個數

semaphore mutex =1;

// 保證訪問緩衝池的原子性

int in =

0, out =0;

// 讀寫指標

cobegin

process producer()

}process consumer()

}

讀者寫者

int reader_count =0;

// 讀者數量

semaphore write_block =1;

// 寫者互斥

semaphore mutex =1;

// 計算讀程序數的互斥

cobegin

process reader()

v(mutex)

;read_file()

;p(mutex);if

(reader_count --==0

)v(mutex);}

process writer()

coend

// 互斥:單個讀者與單個讀者,單個寫者與單個寫者,所有讀者與單個寫者

int reader_count =0;

// 讀者數量

int writer_count =0;

// 寫者數量

semaphore reader_count_mutex =1;

// 計算讀程序數的互斥

semaphore writer_count_mutex =

1l// 計算寫程序數的互斥

semaphore read =1;

// 讀者令牌,使得寫者能打斷讀者程序

semaphore write_block =1;

// 寫者互斥

cobegin

process reader()

v(reader_count_mutex);v

(read)

;read_file()

;p(reader_count_mutex);if

(reader_count --==0

)v(reader_count_mutex);}

process writer()

v(writer_count_mutex);p

(write_block)

;write_file()

;v(write_block);p

(writer_count_mutex);if

(writer_count --==0

)v(writer_count_mutex);}

coend

睡眠理髮師

int chairs = n;

// 椅子數

int waiting =0;

// 等待的顧客

semaphore customers =0;

semaphore barbers =0;

semaphore mutex =1;

cobegin

process barber()

} process customer()

else

}coend

linux中的同步互斥概念

結構 條件變數與pv訊號量的區別

實現應用管道通訊機制

管道型別

共享記憶體通訊機制

訊息傳遞通訊機制

原語 socket通訊機制

訊號通訊機制概念

死鎖防止

死鎖避免

銀行家演算法缺點

檢測與解除

死鎖檢測和死鎖避免的比較

死鎖解除的方法

併發 死鎖與同步

1 簡介 1 兩個併發的程序,其中乙個程序對另乙個程序的影響常常是不可預期的 2 兩個併發程序執行的相對速度無法相互控制 3 程序執行的相對速度不能由程序自己來控制,還與程序排程策略有關 4 不確定性也是併發系統的乙個特徵 1 簡介 死鎖指多個程序在執行過程中因爭奪資源而造成的一種僵局 2 出現死鎖...

併發性 互斥和同步 死鎖和飢餓

二 併發的原理 在單處理器多道程式設計系統中,程序被交替執行,表現出一種併發執行的外部特徵。即使不能實現真正的並行處理,並且在程序間來回切換也需要一定的開銷,交替執行在處理效率和程式結構上還是帶來了重要的好處。在多處理器系統中,不僅可以交替執行程序,而且可以重疊執行程序。三 程序的互動 我們可以根據...

執行緒 二 同步與互斥,死鎖

臨界資源 多執行緒執行流共享的資源 臨界區 訪問臨界資源的 互斥 任何時刻,有且只有乙個執行流進入臨界區,訪問臨界資源,對臨界資源起保護作用 原子性 不會被任何排程機制打斷的操作 int pthread mutex destroy mutex 靜態分配的互斥量不用銷毀,已經加鎖的互斥量不能銷毀,銷毀...