zoukankan      html  css  js  c++  java
  • 毕设数据库内存优化-映射队列

    映射队列有4个API,分成两对。分别是:

    template<typename Fuck>
    BoundedMappingQueue
    {
      public:
        Fuck* Get();
    
        void Push();
    
        Fuck* Pop(int *pos);
    
        void Put(int pos);
    };
    

    其中Get和Push由用户调用,Pop和Put由线程池调用。

    // 用户
    Fuck *shit = queue.Get();
    // 对shit进行初始化或赋值
    // 初始化或赋值需要快
    // 因为此时队列处于加锁状态
    queue.Push();
    
    // 线程池
    int pos;
    Fuck *shit = queue.Pop(&pos);
    (*shit)();// 干活
    queue.Put(pos);
    

    具体介绍映射队列的每个API。

    template<typename Fuck>
    Fuck* Get()
    {
        mutex_.Lock();
        // 等待空闲的元素
        while (avail_[front_] < 0)
            empty_.Wait(mutex_);
        return queue_[avail_[front_]];
        // 不解锁,因为我们对参数进行初始化
        // 后会立刻调用Push
    }
    
    template<typename Fuck>
    void Push()
    {
        // 将初始化完毕的参数位置传给工作槽
        work_[front_] = avail_[front_];
        // 从空闲槽将元素位置删除
        avail_[front_] = -1;
        if (++front_ == capacity_)
            front_ = 0;
    
        mutex_.Unlock();
        // 唤醒工作线程
        ready_.Signal();
    }
    



    template<typename Fuck>
    Fuck* Pop(int *pos)
    {
        mutex_.Lock();
        // 等待可以工作的元素
        while (work_[work_back_] < 0)
            ready_.Wait(mutex_);
        
        // 获取可以工作的元素位置并保存于pos
        // 我们需要保存pos因为在完成工作后
        // 需要将元素位置重新放入空闲槽
        *pos = work_[work_back_];
    
        Fuck *shit = queue_[*pos];
       
        // 从工作槽中将元素位置删除
        work_[work_back_] = -1;
        if (++work_back_ == capacity_)
            work_back_ = 0;
    
        mutex_.Unlock();
        return shit;
    }
    
    
    template<typename T>
    void Put(int pos)
    {
        mutex_.Lock();
        // 将空闲元素的位置放入空闲槽
        avail_[avail_back_] = pos;
        if (++avail_back_ == capacity_)
            avail_back_ = 0;
    
        mutex_.Unlock();
        // 唤醒入列线程
        empty_.Signal();
    }
  • 相关阅读:
    s3c6410_uboot中的代码重定位(nand->sdram)
    s3c6410_uart初始化及读写
    6410裸机开发教程下载
    s3c6410_时钟初始化
    linux device model简述
    CentOS安装flash player插件
    实例分析ELF文件动态链接
    581. Shortest Unsorted Continuous Subarray
    221. Maximal Square
    95. Unique Binary Search Trees II
  • 原文地址:https://www.cnblogs.com/xiaohengheng/p/6864827.html
Copyright © 2011-2022 走看看