Thread相关:
Ceph中线程的在src/common/Thread.h中定义
class
ThreadPool {
private
:
pthread_t thread_id;
public
:
Thread(
const
Thread& other);
const
Thread& operator=(
const
Thread& other);
Thread();
virtual
~Thread();
protected
:
virtual
void
*entry() = 0;
private
:
static
void
*_entry_func(
void
*arg);
public
:
const
pthread_t &get_thread_id();
bool
is_started();
bool
am_self();
int
kill(
int
signal
);
int
try_create(
size_t
stacksize);
void
create(
size_t
stacksize = 0);
int
join(
void
**prval = 0);
int
detach();
};
|
一个线程在创建时调用pthread_create函数来传入entry函数,杀死线程调用pthread_kill函数,当线程被杀死之后,必须调用pthread_join函数来进行线程资源的回收,如果不调用此函数,就会出现类似zombie process。如果要想让系统自己回收线程资源,就要将线程与父线程分离即调用pthread_detach.通过接口对比,我们发现src/common/Thread.h中定义的class thread,实际上是对线程代码ceph自己实现的一层封装。
Ceph中所有要用的线程必须继承Thread类,分别是普通线程,SafeTimerThread类型线程,FinisherThread类线程以及ThreadPool内部线程.本文主要介绍ThreadPool的内部线程.
ThreadPool相关:
ThreadPool的简要定义如下:
class
ThreadPool :
public
md_config_obs_t {
CephContext *cct;
string name;
string thread_name;
string lockname;
Mutex _lock;
Cond _cond;
bool
_stop;
|