首页 > 其他 > 详细

队列-锁

时间:2021-06-18 23:49:23      阅读:27      评论:0      收藏:0      [点我收藏+]

在这

在音视频开发中,我们需要用到队列来存解码得到的avpacket,在这个过程中我们还需要用到锁来提高安全性,我们需要用到以下两个库:

#include <queue>

#include <mutex>

在这里我们需要用到模板,关于模板,我也不太清楚,但是这里的作用就是在创建对象时,我们可以只声明一个类,然后参数就是我们装入队列的类型。

例如:

template<typename T>


class MMQueue {
public:
    ~MMQueue() {
        std::lock_guard< std::mutex> lck(mutex);
        while(Size() > 0) {
            T *t = queue.front();
            queue.pop();

        }
    }

    int Push(T *t) {
        std::lock_guard< std::mutex> lck(mutex);
            queue.push(t);

        return  0;
    }
    int Pop (T * *t) {
        //lock_guard作用:在进入该函数时,会自动上锁,函数结束,自动解锁。
        std::lock_guard< std::mutex> lck(mutex);
            int size = Size();
            if(size > 0) {
                 *t = queue.front();
                 queue.pop();
                 return 0;
             }

         return -1;
    }
    int Size () {
        return queue.size();
    }
private:
    std::queue<T*> queue;
    //允许一个线程递归加锁。
    std::mutex mutex;
};
在实际代码中,我们可以这样用
MMQueue<MMAVPacket> packetQueue;
packetQueue.Push(pkt);
while (packetQueue.Size() > 0) {
        MMAVPacket *pkt = nullptr;

        packetQueue.Pop(&pkt);

        std::cout<<"Packet size (): "<<packetQueue.Size()<<std::endl;

        if(pkt != nullptr) {

            delete pkt;

        }

    }
以上就是关于队列和锁的简单介绍。
 


队列-锁

原文:https://www.cnblogs.com/ranyang/p/14901561.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!