程式執行的順序性
程式執行的併發性
與時間有關的錯誤
程序的協作和競爭
協作:某些併發程序為完成同一任務而共享某些資料,形成協作關係
互斥與同步的區別
臨界區排程原則
臨界區管理的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 靜態分配的互斥量不用銷毀,已經加鎖的互斥量不能銷毀,銷毀...