/*
# 題目
【執行緒池】是一種多工處理模型,由乙個任務佇列和若干工作執行緒組成
【任務佇列】任務佇列包含若干任務
1. 每個任務包含指向任務資料的指標和處理該任務的函式指標
2. 可以向任務佇列追加新任務
【工作執行緒】每個工作執行緒執行乙個任務佇列處理函式
1. 核心功能是從佇列中獲取乙個可用任務
1. 如果佇列中有任務則執行
2. 如果隊列為空,則呼叫休眠函式休眠若干時間後繼續迴圈獲取任務
【說明】不考慮執行緒同步問題
# 思考(×)
【解題方法】離散事件的模擬
【類似問題】[銀行視窗模擬](
【思考】以銀行視窗為例
1. 任務佇列:對應為 銀行的視窗
2. 工作執行緒:對應為 客戶辦理業務
3. 視窗閒置時,即 工作執行緒休眠的時候
*/#include
#include
#include
//rand()
#include
//sleep()
typedef
struct tasktask;
//任務
typedef
struct
taskqueue;
//工作執行緒:有頭結點的佇列
typedef
struct threadthread;
taskqueue taskqueue;
/* 初始化任務佇列 */
intinittask()
/* 向任務佇列追加新的任務 */
intaddtask
(task *newtask)
/* 向任務佇列取任務 */
task*
poptask()
else
return first;}}
/* 工作執行緒:佇列處理函式 */
inthandletask
(thread *pthread)
else
}return1;
}// 此種寫法,需要用多執行緒,這裡就不呼叫了
// 如果需要用單執行緒模擬這個過程,可以用離散事件的思想
intmain()
模擬線程死鎖
b color blue synchronized 特點 color b 兩個synchronized 方法,當乙個執行緒已經獲取鎖定,其它執行緒就不能再執行 color red b 同一例項 b color 的synchronized 方法.b color red 非 color b synchr...
5 模擬線程切換
模擬 windows執行緒切換 threadswitch 正在執行的執行緒在kpcr裡,等待的執行緒在等待鍊錶中,排程中的執行緒在那32個排程鍊錶中。建立它是從下標1的位置開始存的而不是0,因為main需要乙個執行緒。建立的執行緒還不能排程還需要初始化的環境,暫存器的值 當前執行緒的堆疊要確定 模擬...
nodejs 模擬非同步執行,模擬線程暫停
模擬非同步執行,模擬線程暫停,這裡使用了 es7 中的async 和 await,如下 1 模擬線程暫停 2 const sleep function time time 7 8return promise 9 1011 async function asynctest i 16 i 17 awai...