【Linux】基于单例模式懒汉实现方式的线程池

本文介绍了如何使用单例模式结合懒汉式初始化来创建线程池,包括LockGuard和Mutex的使用,以及Task和Thread类的设计,展示了如何在ThreadPool中管理任务和线程同步

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于单例模式懒汉实现方式的线程池

一、LockGuard.hpp

#pragma once
#include <iostream>
#include <pthread.h>
class Mutex//锁的对象
{
   
public:
    Mutex(pthread_mutex_t* lock_p=nullptr)
    :_lock_p(lock_p)
    {
   }
    ~Mutex()
    {
   }
    void lock()
    {
   
        if(_lock_p)
        {
   
            pthread_mutex_lock(_lock_p);
        }
    }
    void unlock()
    {
   
        if(_lock_p)
        {
   
            pthread_mutex_unlock(_lock_p);
        }
    }
private:
    pthread_mutex_t* _lock_p;//锁的指针
};
class LockGuard//加锁和解锁的类
{
   
public:
    LockGuard(pthread_mutex_t* mutex)
    :_mutex(mutex)
    {
   
        _mutex.lock();//在构造函数进行加锁
    }
    ~LockGuard()
    {
   
        _mutex.unlock();//在析构函数进行解锁
    }
private:
    Mutex _mutex;
};

二、Task.hpp

#pragma once
#include <iostream>
#include <functional>
#include <string>
class Task
{
   
    //using func=std::function<int(int,int,char)>;
    typedef std::function<int(int,int,char)> func_t;//函数对象
public:
    Task()
    {
   }
    Task(int x,int y,char op,func_t func)
    :_x(x)
    ,_y(y)
    ,_op(op)
    ,_callBack(func)
    {
   }
    std::string operator()()//消费者调用
    {
   
        int result=_callBack(_x,_y,_op);
        char buffer[1024];
        snprintf(buffer,sizeof(buffer),"%d %c %d=%d",_x,_op,_y,result);//结果字符串
        return buffer;
    }
    std::string toTaskString()//生产者调用
    {
   
        char buffer[1024];
        snprintf(buffer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学IT的小卢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值