• 【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();
    			}
    		};
    	}
    }
    
    
  • 相关阅读:
    Django的model form
    Django之验证码
    ajax获取跨域数据
    js+css模仿打字效果
    CSS自定义消息提示
    CSS画各种二维图形
    最简单的动态进度条
    利用javascript(自定义事件)记录尺寸可变元素的尺寸变化过程
    超级简单的利用javascript实现文件拖拽事件
    javascript 公历与农历相互转换工具类
  • 原文地址:https://www.cnblogs.com/byfei/p/14104065.html
Copyright © 2020-2023  润新知