zoukankan      html  css  js  c++  java
  • 【C++服务端技术】队列

    链表和锁实现的队列,锁的代码请看其他文章

    #pragma once
    #include <list>
    #include "AutoLock.h"
    
    namespace Extralib
    {
    	namespace SafeQueue
    	{
    		using namespace Thread;
    
    		template<typename Data>
    		class safe_queue
    		{
    		private:
    			std::list<Data> the_queue;
    			pthread_mutex_t m_locker;
    		public:
    			safe_queue()
    			{
    				pthread_mutex_init(&m_locker,NULL); 
    			}
    
    			~safe_queue()
    			{
    				pthread_mutex_destroy(&m_locker);
    			}
    
    			void push_front(const Data& data)
    			{
    				AutoLock locker(m_locker);
    				the_queue.push_front(data);
    			}
    
    			void push(const Data& data)
    			{
    				AutoLock locker(m_locker);
    				the_queue.push_back(data);
    			}
    
    			bool empty() 
    			{
    				AutoLock locker(m_locker);
    				return the_queue.empty();
    			}
    
    			Data& front()
    			{
    				AutoLock locker(m_locker);
    				return the_queue.front();
    			}
    
    			Data const& front() const
    			{
    				AutoLock locker(m_locker);
    				return the_queue.front();
    			}
    			
    			Data& back()
    			{
    				AutoLock locker(m_locker);
    				return the_queue.back();
    			}
    
    			bool try_pop(Data& data)
    			{
    				AutoLock locker(m_locker);
    				if(!the_queue.empty())
    				{
    					data = the_queue.front();
    					the_queue.pop_front();
    					return true;
    				}
    				else
    				{
    					return false;
    				}
    			}
    
    			void exchange(std::list<Data>& result_queue)
    			{
    				AutoLock locker(m_locker);
    				result_queue.swap(the_queue);
    			}
    
    			void pop()
    			{
    				AutoLock locker(m_locker);
    				the_queue.pop_front();
    			}
    
    			void clear()
    			{
    				AutoLock locker(m_locker);
    				the_queue.clear();
    			}
    			
    			int size()
    			{
    				AutoLock locker(m_locker);
    				return the_queue.size();
    			}
    		};
    	}
    }
    
    
  • 相关阅读:
    matplotlib讲义
    车间调度问题(part3: 遗传算法)
    sympy库和matplotlib库简介
    python列表
    第十周周三练习
    第十一周周一练习题
    MyEcplise中关于部署文件不成功的问题
    Java中的get()和set()方法
    Java中this关键字的使用
    信号完整性问题的几个基本原则
  • 原文地址:https://www.cnblogs.com/byfei/p/14104065.html
Copyright © 2011-2022 走看看