linux下執行緒池的實現(c )

2021-06-26 07:14:58 字數 4276 閱讀 2995

2012-12-07 16:11:44

|  分類:

電子安防專案|舉報

|字型大小訂閱

參考:

/* * autoptr.h

**  created on: 2012-12-7

*      author: kym

*///智慧型指標模板

#ifndef autoptr_h_

#define autoptr_h_

#include

template

class autoptr

~autoptr()}};

#endif

/* autoptr_h_ */

/* * thread_work.h

**  created on: 2012-12-7

*      author: kym

*///執行類

#ifndef thread_work_h_

#define thread_work_h_

#include"autoptr.h"

typedef

void

*(*work_fun

)(void

*); class

thread_work

thread_work

(const

thread_work

&orig

):arg

(orig

.arg

),fun

(orig

.fun

) thread_work

&operator=(

const

thread_work

&orig

)

}this

->

arg

=orig

.arg

;

this

->

fun

=orig

.fun

;

return

*this

;

}

void

*run

()

~thread_work

() }}

};#endif

/* thread_work_h_ */

/* * thread_pool.h

**  created on: 2012-12-7

*      author: kym

*/#ifndef

thread_pool_h_

#define

thread_pool_h_

#include

"thread_work.h"

#include

#include

#include

enum

state

;

class

uncopy

~uncopy

(){}

private

: uncopy

(const

uncopy

&); uncopy

&operator=(

const

uncopy

&); };

class

thread_pool

:private

uncopy

~thread_pool

()

private

:

intrelease

(int

num,

thread_pool

*data

);

intrealloc

(int

num,

thread_pool

*data

);

static

void

*routin

(void

*arg

); public

:

intinit

();

void

destory

();

intadd_work

(work_fun fun

,char

*arg

); };

#endif

/* thread_pool_h_ */

/* * thread_pool.cpp

**  created on: 2012-12-7

*      author: kym

*/#include

"thread_pool.h"

#define

max_thread

1024

#define

min_thread

2 //初始化,建立指定數目執行緒,放入池中

int thread_pool::init()

int i;

pthread_t pid;

for(i = 0;i < this->total;++ i)

return 1;

}//如果忙碌執行緒少於四分之一則釋放

int thread_pool::release(int num,thread_pool *data)

++ iter;

}return 1;

}//如果忙碌執行緒大於執行緒池總數,則增加

int thread_pool::realloc(int num,thread_pool *data)

return 1;

}//靜態函式,執行緒實際執行函式

void *thread_pool::routin(void *arg)

if(data->mendlflag[pid] == end)

pthread_mutex_unlock(&data->mutex);

std::cout<

return null;

}if(data->busy == data->total - 1)

data->realloc(data->total,data);

data->total *= 2;

}thread_work *q = data->dwork.front();

data->dwork.pop_front();

-- data->curworknum;

++ data->busy;

data->mendlflag[pid] = busy;

pthread_mutex_unlock(&data->mutex);

q->run();

delete q;

pthread_mutex_lock(&data->mutex);

data->mendlflag[pid] = idle;

if((-- data->busy <= data->total / 4) && (data->total != min_thread))

else}}

//新增任務

int thread_pool::add_work(work_fun fun,char *arg)

return 1;

}//釋放整個執行緒池

void thread_pool::destory()

while(miter != this->mendlflag.end())

this->shutdown = true;

}pthread_mutex_unlock(&this->mutex);

pthread_cond_broadcast(&this->cont);

}

/* * main.cpp

**  created on: 2012-12-7

*      author: kym

*/#include

"thread_work.h"

#include

"thread_pool.h"

#include

#include

void

*print

(void*a

)

intmain

()

Linux下執行緒實現

1.執行緒概述 程序是系統中程式執行和資源分配的基本單位。每個程序有自己的資料段 段和堆疊段。執行緒通常叫做輕型的程序。執行緒是在共享記憶體空間中併發執行的多道執行路徑,他們共享乙個程序的資源。因為執行緒和程序比起來很小,所以相對來說,執行緒花費更少的cpu資源。2.執行緒建立和退出 在linux中...

Linux下執行緒

此文講述的執行緒為linux下,其執行緒庫函式是由posix標準定義的,稱為posix thread或者pthread。在linux上線程函式位於libpthread共享庫中,因此在編譯時要加上 lpthread選項。建立執行緒 終止執行緒 等待執行緒 三個函式都為pthread.h中定義,其中要注...

linux下執行緒原理及實現

什麼是執行緒池?諸如web伺服器 資料庫伺服器 檔案伺服器和郵件伺服器等許多伺服器應用都面向處理來自某些遠端 的大量短小的任務。構建伺服器應用程式的乙個過於簡單的模型是 每當乙個請求到達就建立乙個新的服務物件,然後在新的服務物件中為請求服務。但當有大量請求併發訪問時,伺服器不斷的建立和銷毀物件的開銷...