// condition.h
#ifndef _condition_h_
#define _condition_h_
#include
typedef struct conditioncondition_t;
int condition_init(condition_t * cond); //初始化
int condition_lock(condition_t * cond); //加鎖
int condition_unlock(condition_t * cond); //解鎖
int condition_wait(condition_t* cond); //等待事件的呼叫
int condition_timedwait(condition_t * cond , const
struct timespec * abstime); // 超時處理
int condition_signal(condition_t * cond); //向等待執行緒發起通知
int condition_broadcast(condition_t * cond); //向等待執行緒發起廣播
int condition_destroy(condition_t *cond); //銷毀條件變數
#endif
// condition.cpp
#include
#include
"condition.h"
int condition_init(condition_t * cond)
int condition_lock(condition_t * cond)
int condition_nulock(condition_t * cond)
int condition_wait(condition_t * cond)
int condition_timedwait(condition_t * cond)
int condition_signal(condition_t * cond)
int condition_broadcast(condition_t *cond)
int condition_destroy(condition_t * cond)
#ifndef _pthreadpool_h_
#define _pthreadpool_h_
#include "condition.h"
//任務結構體,將任務放入佇列由執行緒池中的執行緒來執行
typedef struct task task_t;
//執行緒池結構體
typedef struct threadpoolthreadpool_t;
//初始化執行緒池
void threadpool_init(threadpool_t * pool , int threads);
//往執行緒池中新增任務
void threadpool_add_task(threadpool_t* pool , void* (*run)(void *arg), void * arg);
//銷毀執行緒池
void threadpool_destroy(threadpool_t * pool );
#endif
#include
#include
#include
<
string
.h>
#include
#include
#include
#include
"threadpool.h"
using namespace std;
void
* thread_routine(void
* arg)
}//等待到條件 ,處於工作狀態
pool->idle--;
if(pool->first !=
null )
//等待到銷毀
if((pool->quit) && (pool->first ==
null))
condition_nulock(&pool->ready);
break ;
}if(timeout && (pool->first ==
null))
condition_unlock(&pool->ready);
}cout <<
"執行緒id"
<<(int)pthread_self()<<
"銷毀"
<< endl;
return (void
*) 0;
}// 執行緒池的初始化
void pthreadpool_init(threadpool_t * pool , int threads)
//新增任務
void pthreadpool_add_task(threadpool_t * pool , void
*(*run)(void
* arg), void
* arg)
else
//如果有等待執行緒就喚醒 ,執行其中一
if(pool->idle >
0 )else
if(pool->counter < pool->max_threads)
}//銷毀執行緒池
void threadpool_destroy(threadpool_t * pool)}}
condition_unlock(&pool->ready);
condition_destroy(&pool->ready); //銷毀條件變數
}
#include
#include
#include
#include
#include
#include
#include "threadpool.h"
using
namespace
std;
void * mytask(void *arg)
int main(void)
sleep(6);
threadpool_destroy(&pool); //銷毀執行緒池
return
0; }
linux C實現執行緒池
執行緒池包括任務佇列,執行緒陣列,管理模組幾個部分,依次實現這幾個模組 typedef struct tk tasktk task t 任務佇列,用單鏈表的方式實現 執行緒池的管理模組用以下 typedef struct threadpooltk threadpool t 要實現以下幾個方法 tk ...
C 11 執行緒池demo
執行緒池 一種執行緒的使用模式,執行緒過多會帶來排程開銷,進而影響快取區域性性和整體效能。而執行緒池維護著多個執行緒,等待著監督管理者分配可併發執行的任務。這避免了在處理短時間任務時建立與銷毀執行緒的代價。執行緒池不僅能夠保證核心的充分利用,還能防止過分排程。可用執行緒數量應該取決於可用的併發處理器...
VC 執行緒池demo 附原始碼)
第18章 vc 執行緒池demo 附原始碼 又不影響主線程工作時!所以我們要想清楚什麼時候需要用到執行緒池!一般都是用在伺服器socket通訊場景是用得最多的 客戶端連線併發.等 當需要處理的任務較少時,我們可以自己建立執行緒去處理,但在高併發場景下,我們需要處理的任務數量很多,由於建立銷毀執行緒開...