linux c 執行緒池開發demo

2022-08-30 02:18:08 字數 3297 閱讀 6486

// 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通訊場景是用得最多的 客戶端連線併發.等 當需要處理的任務較少時,我們可以自己建立執行緒去處理,但在高併發場景下,我們需要處理的任務數量很多,由於建立銷毀執行緒開...