池c++ 和java_一种类似JAVA线程池的C++线程池实现方法

什么是线程池

线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着管理器分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性。线程池不仅能够保证内核的充分利用,还能防止过分调度。

线程池的实现

线程池在JAVA平台上已经有成熟的实现方式,本文介绍参考JAVA线程池实现方式实现的C++线程池类库。

该类库中主要的类的关系如下图所示:

ada86b628dc416b2d5cb1851ccc940d0.png

线程池类图

其中,IRuanble为接口类,类似JAVA中的Runnable接口;

DefulatMutext 为访问互斥体类,用于临界资源时的加解锁;

RootThread为线程实现的基类,定义了线程中的通用的方法;

CommonThread为一个简单的线程实现类,类似于JAVA中的Thread类;

DefaultThread类为另一线程实现类,以IRunnable为参数,可将IRunnable转化为线程;

ThreadPool为线程池实现类,类似JAVA中的ThreadPool类。

类库的安装方法

2.     进入类库根文件夹依次执行configure,make, make install

类库的使用方法

与JAVA线程池的使用方式相似,首先创建实现IRunnable接口的类,然后交由ThreadPool类实例进行调度即可以。

以下按示例代码:

1.     创建demo_main.cpp文件,代码如下:

#include

#include

class DemoThread : public mix::IRunnable

{

private:

int id;

public:

DemoThread(int id)

{

this->id = id;

}

virtual void Run()

{

for (int i = 0; i < 3; i++)

{

usleep(500);

printf("Thread %d: loop index %d\n", id, i);

}

}

virtual bool IsDelete ()

{

return true;

}

virtual int Priority()

{

return 0;

}

virtual void SetPriority(int priority)

{

}

virtual void Cancel()

{

}

virtual bool IsCanceled()

{

return false;

}

virtual void Pause() {}

virtual void Resume() {}

virtual bool IsPaused()

{

return false;

}

virtual std::string GetTaskId()

{

return "";

}

virtual void TryPause()

{

}

};

int main(int argc, char *argv[])

{

mix::ThreadPool threadPool(10, 20, 5);

printf("Mix Thread Begin\n");

for (int i = 0; i < 5; i++)

{

threadPool.Execute(new DemoThread(i));

}

sleep(1);

while (threadPool.GetActiveCount() > 0)

{

sleep(1);

}

printf("Mix Thread End\n");

return 0;

}

2.     执行以下命令进行编译,(假设mixthread安装在/usr/local目录下)

g++ -I/usr/local/include -g -O2 demo_main.cpp -pthread -o mix_thread_demo -lmixthread -pthread -Wl,-rpath -Wl,/usr/local/lib

生成执行程序mix_thread_demo

3.     执行结果

执行  ./mix_thread_demo, 显示如下结果

./mix_thread_demo

Mix Thread Begin

Thread 3: loop index 0

Thread 4: loop index 0

Thread 2: loop index 0

Thread 1: loop index 0

Thread 0: loop index 0

Thread 4: loop index 1

Thread 3: loop index 1

Thread 2: loop index 1

Thread 1: loop index 1

Thread 0: loop index 1

Thread 4: loop index 2

Thread 3: loop index 2

Thread 2: loop index 2

Thread 1: loop index 2

Thread 0: loop index 2

Mix Thread End

总结

以上所述是小编给大家介绍的一种类似JAVA线程池的C++线程池实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对谷谷点程序网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值