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
(void*a
)
intmain
()
Linux下執行緒實現
1.執行緒概述 程序是系統中程式執行和資源分配的基本單位。每個程序有自己的資料段 段和堆疊段。執行緒通常叫做輕型的程序。執行緒是在共享記憶體空間中併發執行的多道執行路徑,他們共享乙個程序的資源。因為執行緒和程序比起來很小,所以相對來說,執行緒花費更少的cpu資源。2.執行緒建立和退出 在linux中...
Linux下執行緒
此文講述的執行緒為linux下,其執行緒庫函式是由posix標準定義的,稱為posix thread或者pthread。在linux上線程函式位於libpthread共享庫中,因此在編譯時要加上 lpthread選項。建立執行緒 終止執行緒 等待執行緒 三個函式都為pthread.h中定義,其中要注...
linux下執行緒原理及實現
什麼是執行緒池?諸如web伺服器 資料庫伺服器 檔案伺服器和郵件伺服器等許多伺服器應用都面向處理來自某些遠端 的大量短小的任務。構建伺服器應用程式的乙個過於簡單的模型是 每當乙個請求到達就建立乙個新的服務物件,然後在新的服務物件中為請求服務。但當有大量請求併發訪問時,伺服器不斷的建立和銷毀物件的開銷...