執行緒池的實現基本上是乙個生產者消費者模型,具體就是1個生產者對應多個多個消費者。主線程對應其中的生產者,將到達的客戶請求進行封裝後送到商店供消費者使用(這裡的商店可以用鍊錶或是其它容器來實現),而執行緒池中的多個工作執行緒就是這些商品(客戶請求)的消費者。
#include
#include
#include
#include
#include
#include
void* t1(void* a)
void* t2(void* a)
}int main()
在不知道自己的os究竟表現如何的情況下,可用select函式實現執行緒的定時阻塞。類似如:
select(0, null, null, null, &time)
其實,如果知道使用的執行緒庫是 nptl ( native posix thread library),則可直接使用sleep來實現。但若使用的執行緒庫是linuxthreads,則sleep就很不確定了。
判斷系統中的執行緒庫可用命令:
# getconf gnu_libpthread_version
nptl 0.60 (輸出)
另外在編譯多執行緒程式時,需要指定執行緒庫,使用linuxthreads執行緒庫和使用nptl執行緒庫的方法是在編譯時新增相應的選項,兩個執行緒庫對應的選項如下:
linuxthreads : -lpthread
nptl : -nptl
nptl使linux核心可以非常有效的執行使用posix執行緒標準寫的程式。測試資料表明,在32位機下,nptl成功啟動100000個執行緒只用了2秒,而不使用nptl將需要大約15分鐘左右的時間。
關於Sleep函式
關於 sleep 函式在windows 系統和linux 系統下是兩個不同的函式,差別較大,但功能是相同的,都是將程序掛起一段時間。windows 系統下函式名為 sleep 其函式原型為 include 函式使用標頭檔案 void sleep dword dwmilliseconds 引數為毫秒 ...
執行緒sleep的坑
執行緒可以用繼承thread類或者實現runnable介面來實現.thread.sleep 是thread類的方法,只對當前執行緒起作用,睡眠一段時間.如果執行緒是通過繼承thread實現的話這2個方法沒有區別 如果執行緒是通過實現runnable介面來實現的,則不是thread類,不能直接使用th...
執行緒的控制 sleep
執行緒睡眠 如果需要讓當前執行的執行緒暫停一段時間,並進入阻塞狀態可以呼叫thread類的靜態方法sleep 實現 當當前執行緒呼叫sleep方法後,該執行緒會進入阻塞狀態,在該執行緒睡眠的時間裡,該執行緒不會有執行的機會,即使執行的程式中沒有其他執行緒。override public void r...