linux线程池代码(c++实现)

  • L1_292695
    了解作者
  • 2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-20 05:12
    上传日期
linux线程池代码(c++实现) 分两部: 1、创建线程池 2、创建任务、加入线程池 可以参考使用
归档.zip
  • ThreadPool.cpp
    2KB
  • demo.cpp
    605B
  • ThreadPool.h
    655B
  • RunTask.h
    169B
内容介绍
#include "ThreadPool.h" #include <iostream> #include <unistd.h> void* ThreadPool::threadFunc(void *arg) { ThreadPool* threadPool = (ThreadPool*)arg; RunTask* task; while (1) { if (threadPool->poolExitFlag) { if (!threadPool->taskAllConsume) break; else if (0 == threadPool->getTaskNum()) break; } if (!threadPool->getRunTask(&task)) { usleep(1000); continue; } task->run(); if (task->autoDelete()) { delete task; } usleep(1000); } return 0; } ThreadPool::ThreadPool(int poolSize, bool allConsume) { if (poolSize <= 0) { cout << "pool size must bigger than 0" << endl; } maxThreadNum = poolSize; taskAllConsume = allConsume; poolExitFlag = false; pthread_mutex_init(&taskMutex, NULL); if (!create()) { throw 1; } } ThreadPool::~ThreadPool() { destroy(); } bool ThreadPool::create() { for (int i = 0; i < maxThreadNum; i++) { pthread_t tidp; if (0 != pthread_create(&tidp, NULL, threadFunc, this)) { return false; } threads.push_back(tidp); } return true; } void ThreadPool::destroy() { poolExitFlag = true; list<pthread_t>::iterator iter; for (iter= threads.begin(); iter != threads.end(); iter++) { pthread_join(*iter,NULL); } } bool ThreadPool::run(RunTask* runTask, ThreadPriority priority) { bool ret = false; if (!poolExitFlag) { pthread_mutex_lock(&taskMutex); if (High == priority) { runTasks.push_front(runTask); } else { runTasks.push_back(runTask); } pthread_mutex_unlock(&taskMutex); ret = true; } return ret; } bool ThreadPool::getRunTask(RunTask** task) { pthread_mutex_lock(&taskMutex); list<RunTask *>::iterator iter = runTasks.begin(); if (iter == runTasks.end()) { pthread_mutex_unlock(&taskMutex); return false; } *task = (*iter); runTasks.pop_front(); pthread_mutex_unlock(&taskMutex); return true; } int ThreadPool::getTaskNum() { int size = 0; pthread_mutex_lock(&taskMutex); size = runTasks.size(); pthread_mutex_unlock(&taskMutex); return size; }
评论
    相关推荐
    • linux C++ 预编译
      linux C++ 预编译 cmake样例
    • linux c++线程
      本人主要想练习一下socket c++ 多线程编程, 这个项目想要实现的工能是:这是一个服务器,运行先等待 client的连接,当有 client连接,服务器创建一个线程!主线程是还是等待 client发送的信息,创建的线程也是做...
    • linux C++ 练习代码
      linux C++ 练习代码
    • Linux C++ Programming
      This document provides a comprehensive list of C++ URL pointers, links to C++ online textbooks, and programming tips on C++. This document also provides a C++ library which imitates Java−language, ...
    • Linux C++ 编程
      学习Linux C++,编程的好东东,初学的人可以好好看看
    • linux c++源码
      对初学linux的,有一定linux基础的,初学c++的,想尽快有一段代码让自己练手的就马上来下载的。但是得给点积分哦。
    • linux c++ 简单串口通信
      一个linux下利用com口 本机发送本机接受数据的简单例子。运行程序前要先切换本机com。本文件只包含src部分。
    • linux C++ webserver
      linux C++实现的webserver 包含tcpserver和tcpclient,线程池,select模式, epoll的LT和ET模式
    • Linux C++ mqtt
      将mqtt得发送和接收分开,
    • linux C++ 获取网页内容
      c++写的通过网址来获取网页内容,里面附带测试程序。