linux程式設計 模擬實現乙個執行緒池

2021-10-19 02:54:42 字數 1502 閱讀 3809

實現乙個執行緒池需要構建三個類:執行緒任務類給定兩個介面,settask()負責把給的資料和方法傳進任務系統,start()負責將給定資料用給定方法來處理。

安全佇列類,負責給執行緒池提供乙個能夠互斥訪問的安全佇列。

執行緒池類提供三個介面,threadpool()建立指定數量的執行緒,taskpush()將任務放入安全佇列,*thread_entry()負責讓執行緒取任務並進行處理。

#include

#include

#include

#include

#include

#define max_thread 5

#define max_queue 10

typedef

void

(*handler_t)

(int data)

;class threadtask

void

start()

//執行緒呼叫start介面實現通過給定方法處理給定資料};

class blockqueue

~blockqueue()

bool push

(threadtask data)

_queue.

push

(data)

;pthread_mutex_unlock

(&_mutex)

;pthread_cond_signal

(&_cond_cus)

;return true;

} bool pop

(threadtask *data)

*data=_queue.

front()

; _queue.

pop();

pthread_mutex_unlock

(&_mutex)

;pthread_cond_signal

(&_cond_pro)

;return true;}}

;class threadpool

pthread_detach

(tid);}

} bool taskpush

(threadtask &task)

;static

void

*thread_entry

(void

*arg)

return

null;}

//執行緒入口函式,這個介面中完成任務處理的過程};

void

method

(int data)

intmain()

while(1

)sleep(1

);return0;

}

執行結果

Linux下模擬實現乙個微型shell

首先我們先看一下shell的執行過程 shell從使用者讀入字串 ls 並建立乙個新的程序,在那個程序中執行ls程式並等待那個程序結束。然後shell讀取新的一行輸入,建立乙個新的程序,在這個程序中執行程式並等待這個程序結束。所以我們要寫乙個微型shell,需要迴圈以下過程 獲取終端輸入。解析輸入 ...

如何模擬實現乙個call apply bind函式

call模擬實現 首先我們實現繫結this功能。比如我們有乙個foo函式 function getname 還有乙個wechat物件 const wechat 我們希望實現 getname.call wechat fedaily以wechat和getname這個為例,這裡的this即getname,...

編寫乙個C語言程式模擬實現strlen函式

strlen函式功能是計算字串中字元的個數.除 0外 而字串本身就是乙個字元陣列,只不過末尾以 0結束.因此,我們只需遍歷除 0之外的所有字元即可.有三種方法可以解決這個問題.方法一 設定乙個整型計數器,遍歷字串.方法二 通過不斷函式自身的遞迴.方法三 與方法一類似,設定乙個char 變數標記字串尾...