實現乙個執行緒池需要構建三個類:執行緒任務類給定兩個介面,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 變數標記字串尾...