高併發中的問題

1.問題:假設系統中有5臺設備,有多個進程需要使用2個設備,假定每個進程一次只能使用一臺,則至多允許多少個進程來競爭這5個資源,而不會發生死鎖?

答案:哲學家就餐問題。系統中有N個併發進程,若規定每個進程需要申請R個某類資源,則當系統提供K=N*X(R-1)+1個同類資源時,無論採用何種方式申請使用,一定不會發生死鎖。 將K=5,R=2代入式子得N=4

 

2.併發,並行的區別?

在單CPU系統中,系統調度在某一時刻只能讓一個線程運行,雖然這種調試機制有多種形式(大多數是時間片輪巡爲主),但無論如何,要通過不斷切換需要運行的線程讓其運行的方式就叫併發(concurrent)。而在多CPU系統中,可以讓兩個以上的線程同時運行,這種可以同時讓兩個以上線程同時運行的方式叫做並行(parallel)

 

無鎖化編程有哪些常見方法?

1.針對計數器,可以使用原子加 
2.只有一個生產者和一個消費者,那麼就可以做到免鎖訪問環形緩衝區(Ring Buffer)
3.RCU(Read-Copy-Update),新舊副本切換機制,對於舊副本可以採用延遲釋放的做法
4.CAS(Compare-and-Swap),如無鎖棧,無鎖隊列等待

同步機制應該遵循哪些基本準則?

1.空閒讓進
2.忙則等待
3.有限等待
4.讓權等待
死鎖的原因主要是:(1) 因爲系統資源不足。(2) 進程運行推進的順序不合適。(3) 資源分配不當等。
產生死鎖的四個必要條件:(1) 互斥條件(2) 請求與保持條件(3) 不剝奪條件。(4) 循環等待條件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章