C語言 模擬線程池

2021-09-02 23:26:39 字數 1146 閱讀 3005

/*

# 題目

【執行緒池】是一種多工處理模型,由乙個任務佇列和若干工作執行緒組成

【任務佇列】任務佇列包含若干任務

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...