併發的兩個 老 問題

2021-10-08 17:50:51 字數 1106 閱讀 4269

我理解的死鎖是指 「無外界條件干預無法自行解決的一種狀態」

這種狀態一旦出現會導致程式邏輯問題,資源占用問題等很嚴重的問題。

下面這段**截自書中的**, 演示了死鎖的場景

public

class

deadlockdemo

private

void

deadlock()

catch

(interruptedexception e)

synchronized

(b)}}}

);thread t2 =

newthread

(new

runnable()

}}})

; t1.

start()

; t2.

start()

;}}

當出現死鎖的時候, 線上的業務是可以反饋出來的, 同時我們通過執行緒 dump 是可以查詢到具體的死鎖地方.

當我們知道什麼是死鎖問題後, 那就應該在開發階段首先去考慮並且避免這種場景

什麼是資源,對於軟體程式來說資源就是

:那什麼情況會出現資源問題呢?

:不合理的分配情況下

怎麼做才能做到合理分配是我們在做程式設計時需要考慮的,比如軟體執行的網路環境,磁碟大小,記憶體大小,系統的cpu能力、核心數等等

一般在資源分配上遵循兩種任務情況來決定,1 是 io密集型任務 2 是 cpu密集型任務。再簡單一點就是你的任務是需要資料的還是需要計算的。需要資料的就是io,需要計算的就是cpu, 根據這兩種情況來指定我們的資源分配。推薦一篇文章

合理的資源分配,可以將系統的效能發揮的更好,反之更壞。所以執行緒不是建立的越多越好。

執行緒池的執行緒復用,根據資源合理的分配執行緒數,都可以幫我們有效的解決資源問題。執行緒數的大小設定。

建議

cpu密集型任務,最佳執行緒數設定為 cpu數+1

io密集型任務, 最佳執行緒數目 = ((執行緒等待時間 + 執行緒cpu時間)/ 執行緒cpu時間 )* cpu數目

P V 的兩個問題

有兩類程序 a 和 b,乙個資源 t。兩類不能同時使用乙個資源 t。可以有至多 n 個 a 同時使用 t,或者至多 m 個 b 同時使用 t。semaphore cnta 0 semaphore cntb 0 semaphore mutext 1 semaphore mutexa 1 semapho...

兩個問題的對比

問題1 cf390c 給定若干行聊天記錄 發言人 話 有些聊天記錄的 發言人 是缺失的,已知相鄰對話發言人一定不同,且每個發言人說的話裡都不會包含自己的名字,現給定可能的發言人的集合,請填充每個對話的發言人.來自codeforces round 390 問題2 lc36 給定乙個9 9的矩陣,有些元...

兩個奇怪的問題

因為 中有align left class table cellspacing 1 cellpadding 4 width 800 align left 導致 相對位置十分的怪異。後面的文字不是在 後面,而是和 在水平上對齊!刪掉就好了。td font family tahoma,verdana f...