C 多執行緒學習 三 阻塞

2021-10-09 20:43:49 字數 588 閱讀 5181

阻塞:

如果執行緒在執行由於某種原因導致暫停,name就認為該執行緒被阻塞了。

例如:在sleep和join等其他執行緒結束

被阻塞的執行緒會立即將其處理器的時間片生成給其他執行緒,從此就不在消耗處理器時間,直到滿足其阻塞條件為止。

可以通過threadstate這個狀態判斷執行緒是否處於被阻塞狀態

bool blocked = (thread.threadstate & threadstate.waitsleepjoin) != 0;

theradstate:

threadstate 是乙個flags enum ,通過按位與。可以合併資料選項。

解除阻塞 unblocking

當遇到下列情況阻塞就會被解除:

阻塞條件滿足:

操作超時(如果設定超時時間)

通過thread.interrupt()進行打斷

通過threa.abort()進行中止

上下文切換:

當執行緒阻塞或者解除阻塞,作業系統將進行上下文切換,這會產生少量的開銷,通常為1—2us;

i/o-bound 和 compute-bound

空閒等待 和忙等待(自旋)

C 多執行緒學習筆記三

thread 乙個非同步任務開啟乙個thread,具有專有性 threadpool 開啟非同步任務只需要向其借用執行緒,使用完後歸還 threadpool.queueuserworkitem obj new func string hello world console.writeline 主線程 ...

多執行緒 阻塞佇列

blockingqueue最終會有四種狀況,丟擲異常 返回特殊值 阻塞 超時,下表總結了這些方法 丟擲異常 特殊值阻塞 超時插入add e offer e put e offer e,time,unit 移除remove poll take poll time,unit 檢查element peek...

多執行緒 阻塞佇列

1 當佇列滿的時候,插入元素的執行緒被阻塞,直達佇列不滿。2 隊列為空的時候,獲取元素的執行緒被阻塞,直到佇列不空。生產者就是生產資料的執行緒,消費者就是消費資料的執行緒。在多執行緒開發中,如果生產者處理速度很快,而消費者處理速度很慢,那麼生產者就必須等待消費者處理完,才能繼續生產資料。同樣的道理,...