使用C 11 實現阻塞佇列

2021-07-04 15:54:33 字數 1140 閱讀 6394

阻塞佇列主要用於執行緒和執行緒之間的通訊。當隊列為空時,從佇列中獲取元素的執行緒將會被掛起;當佇列是滿時,往佇列裡新增元素的執行緒將會掛起。

本文使用c++ 11中的多執行緒庫,實現了乙個帶有最大容量的阻塞佇列。**使用visual c++ 2015編寫。

blockqueue.hpp

#pragma once

#include #include #include templateclass blockqueue

size_t size()

void push_back(const t &item)

}m_list.push_back(item);

m_notempty.notify_all();

} t pop()

t temp = *m_list.begin();

m_list.pop_front();

m_notfull.notify_all();

lock.unlock();

return temp;

} bool empty()

bool full()

tlock lock(m_mutex);

return m_list.size() >= m_maxcapacity;

}private:

bool hascapacity() const

typedef std::dequetlist;

tlist m_list;

const int m_maxcapacity;

std::mutex m_mutex;

std::condition_variable m_notempty;

std::condition_variable m_notfull;

};

#include #include #include #include "blockqueue.hpp"

using namespace std;

typedef blockqueuetqueue;

void produce(tqueue &queue)

}void consume(tqueue &queue)

}int main()

阻塞佇列實現

0前言 1實現原始碼 1.1 鎖封裝 通過訊號量保證不同執行緒之間資料操作的一致性。class csemaphore csemaphore void produce void consume bool try return true bool trytime int micsec int ret s...

C 11 執行緒池實現

c 11中已經新增了跨平台的thread相關工具,在一些輕量級使用場景中,使用std thread無疑會給我們帶來很多方便。這裡使用它實現了乙個簡單的執行緒池 easythreadpool.h ifndef easy thread pool h define easy thread pool h i...

使用C 11移動複製

製作乙個可移植的使用右值引用的類 c 11標準的最大功能之一是右值引用。此功能允許修改臨時物件,從它們那裡 偷 資源。在c 03中沒有有值引用,但使用boost.move庫,可以寫一些可移植的使用右值引用的 左值 乙個函式或者物件例項。失效值 生命期即將結束的物件。廣義左值 包括左值和失效值。右值 ...