假設有這麼個場景,乙個倉庫,裡面有n件貨物,現有六個搬運工(用執行緒模擬),其中2個向倉庫放東西,4個往外搬東西。假設1秒能向裡放2件貨物,同時可向外搬3件貨物(執行緒休眠),現在需要往裡放m件貨物,一旦倉庫有貨就要向外搬,這個東西怎麼設計?
這顯然牽扯到執行緒同步的問題。本來,考慮的有點簡單了,只用了乙個鎖,但結果是在執行乙個動作的同時,另乙個動作一直在等待(比如,放的時候,搬的執行緒等待放完後,才能開始執行),也就是在一秒內,只能放或者搬,這樣的話,還不如乙個執行緒全跑下來了,還省事。思考良久後,請教了一下,原來這種問題要放兩個執行緒鎖(對應兩個動作),恍然大悟。好了,別的不說了,直接上這貨的**吧:假設n和m都為15,標準情況下需要放乙個佇列,現在只用最簡單的數字來模擬吧
class上面的紅色字型顯示了兩個執行緒鎖,以及啟用其他執行緒的時間段,下面貼上主線程:operator
}public
intpushtotal
}public
void setpushnum(int
t)
}public
void
push()
catch
(synchronizationlockexception e)
catch
(threadinterruptedexception e)
}else
,\t還需要放的數量:,\t搬運工:
", num, pushnum,
thread.currentthread.name);
lock
(locker2)}}
}}public
void
pull()
catch
(synchronizationlockexception e)
catch
(threadinterruptedexception e)
}else
\t搬運工:
",num , thread.currentthread.name);
} }}}
}
static效果圖如下:void main(string
args)
}else
} while (true
); }
catch
(threadstateexception e)
catch
(threadinterruptedexception e)
}
當按下y後,繼續啟用等待的執行緒:
多執行緒引發的血案
我們的微服務閘道器執行出現了兩次的自動下線,然後看日誌並沒有報錯資訊。所以我們初步懷疑是linux自己把這個程序給殺掉了。我們剛開始使用下面的命令,並沒有發現有kill的日誌 dmesg egrep i b100 killed process 或者 egrep i killed process va...
C 多執行緒問題
多執行緒問題,一直是我的乙個噩夢,老是搞不清楚怎麼回事,真是很慚愧呀,所以今天特地向各位的大大求教。如下 c include www.h include include include include include include pthread cond t cond pthread mutex...
多執行緒問題C
1.過去寫的微控制器裸跑的程式,其實也屬於多執行緒的,用智慧型電表中的韌體做個比方。void main void 迴圈中,所列包括3個 執行緒 處理,執行緒1在執行完之後執行執行緒2,執行緒2執行完進入執行緒3.後面依次,此類我覺得也可稱之 執行緒 由於不必存在同時處理的問題,因此不存在爭搶同一共享...