自己动手写线程池之线程

线程封装

pthread_t tid;
pthread_create(&tid, NULL, callback, NULL);

最原始的线程创建方式,线程通过回调函数callback来实现不同的功能。这种方式不仅使得线程创建函数散落在代码的各个地方,而且通过函数功能来区分线程有违面向对象概念。接下来,通过面向对象思想将线程进行封装,用户只需要继承线程基类,实现回调函数,即可完成自定义线程类的创建。

线程设计

线程不能对自己进行joincancel操作,因而将线程管理功能委托给线程控制器。整体设计如下图:


线程实体

  • Run 启动线程
  • IsAlive 线程是否正在运转
  • Handler 所有用户自定义线程都需要实现该函数
  • GetThreadControl 返回一个线程控制器

线程控制实体

  • Id 返回线程的线程ID
  • Join 等待线程运行完毕
  • Stop 停止线程
  • Detach 分离线程

线程原理

ThreadControl Thread::Run()
{
pthread_create(&_tid, NULL, Thread::CallBack, this);
return ThreadControl(_tid);
}

void *Thread::CallBack(void *arg)
{
Thread *thread = reinterpret_cast<Thread*>(arg);
thread->Handler();
}

pthread_create函数创建线程,调用线程处理函数Thread::CallBack,传入参数thisCallBack为类Thread的静态函数,通过传入的this指针调用Thread类的HandlerHandle为纯虚函数,由子类负责实现。

自定义线程


Handler是基类Thread的一个虚函数,用户继承Thread并实现Handler即可,剩下工作由Thread线程类完成。

class UserDefThread : public Thread
{
public:
void Handler() { cout << "Hello World!" << endl; }
};

UserDefThread myThread;
myThread.Run();

代码路径https://github.com/spch2008/threadpool/blob/v1.0/include/thread.h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值