中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

可以做軟件的網(wǎng)站有哪些功能成都百度業(yè)務(wù)員電話

可以做軟件的網(wǎng)站有哪些功能,成都百度業(yè)務(wù)員電話,網(wǎng)站數(shù)據(jù)庫(kù)數(shù)據(jù)丟失,站長(zhǎng)工具關(guān)鍵詞挖掘1 背景 STL的容器不是線程安全的,我們經(jīng)常會(huì)有需求要求數(shù)據(jù)結(jié)構(gòu)線程安全,比如寫生產(chǎn)者消費(fèi)者模型的時(shí)候,就要求隊(duì)列線程安全。利用std::queue和C線程標(biāo)準(zhǔn)庫(kù)的一些組件(mutex,condition_variable)&#xff…

1 背景

  • STL的容器不是線程安全的,我們經(jīng)常會(huì)有需求要求數(shù)據(jù)結(jié)構(gòu)線程安全,比如寫生產(chǎn)者消費(fèi)者模型的時(shí)候,就要求隊(duì)列線程安全。
  • 利用std::queue和C++線程標(biāo)準(zhǔn)庫(kù)的一些組件(mutex,condition_variable),可以寫一個(gè)線程安全的隊(duì)列ConcurrenceQueue。

2 思路梳理

需要4個(gè)函數(shù)

  • push,入隊(duì);
  • pop,出隊(duì)并返回原來對(duì)頭的元素,如果為隊(duì)空則阻塞
  • tryPop,出隊(duì)并返回原來對(duì)頭的元素,如果隊(duì)空返回空(使用智能指針作返回類型),非阻塞
  • empty,返回是否為空,實(shí)則沒啥用,多線程條件下判空,下一瞬間另一線程就可能push進(jìn)去東西了。

3 實(shí)現(xiàn)代碼

#ifndef __CONCURRENCEQUEUE_H__
#define __CONCURRENCEQUEUE_H__
#include <mutex>
#include <condition_variable>
#include <deque>
#include <queue>
#include <memory>template<typename DATATYPE, typename SEQUENCE = std::deque<DATATYPE>>
class ConcurrenceQueue 
{
public:ConcurrenceQueue() = default;ConcurrenceQueue(const ConcurrenceQueue & other){std::lock_guard<std::mutex> lg(other.m_mutex);m_data = other.m_data;}ConcurrenceQueue(ConcurrenceQueue &&) = delete;ConcurrenceQueue & operator= (const ConcurrenceQueue &) = delete;~ConcurrenceQueue() = default;bool empty() const {std::lock_guard<std::mutex> lg(m_mutex);return m_data.empty();}void push(const DATATYPE & data) {std::lock_guard<std::mutex> lg(m_mutex);m_data.push(data);m_cond.notify_one();}void push(DATATYPE && data) {std::lock_guard<std::mutex> lg(m_mutex);m_data.push(std::move(data));m_cond.notify_one();}std::shared_ptr<DATATYPE> tryPop() {  // 非阻塞std::lock_guard<std::mutex> lg(m_mutex);if (m_data.empty()) return {};auto res = std::make_shared<DATATYPE>(m_data.front());m_data.pop();return res;}std::shared_ptr<DATATYPE> pop() {  // 非阻塞std::unique_lock<std::mutex> lg(m_mutex);m_cond.wait(lg, [this] { return !m_data.empty(); });auto res = std::make_shared<DATATYPE>(std::move(m_data.front()));m_data.pop();return res;}private:std::queue<DATATYPE, SEQUENCE> m_data;mutable std::mutex m_mutex;std::condition_variable m_cond;
};
#endif

?4 測(cè)試

全局的:

ConcurrenceQueue<int> g_queue;void producer() 
{    for (int i = 0; i < 100; ++i) {g_queue.push(i);std::this_thread::sleep_for(std::chrono::seconds(3));}
}void consumer1() 
{while (1) {std::printf("[1]  -------   %d\n", *g_queue.pop());}
}void consumer2() 
{while (1) {auto front = g_queue.tryPop();std::printf("[2]  -------   %d\n", front ? *front : -1);std::this_thread::sleep_for(std::chrono::seconds(1));}
}

測(cè)試 1:(消費(fèi)者阻塞式消費(fèi))

int main () 
{std::thread t1(producer);std::thread t2(consumer1);t1.join();t2.join();return 0;
}

測(cè)試 2:(消費(fèi)者非阻塞式消費(fèi),但要sleep輪詢)

int main () 
{std::thread t1(producer);std::thread t2(consumer2);t1.join();t2.join();return 0;
}

http://www.risenshineclean.com/news/54040.html

相關(guān)文章:

  • 網(wǎng)站控制面板網(wǎng)站查詢
  • 哪家公司做網(wǎng)站比較好成都百度seo公司
  • 昆明企業(yè)建網(wǎng)站多少錢萬(wàn)網(wǎng)域名注冊(cè)官網(wǎng)
  • 怎樣建設(shè)與維護(hù)自己的平臺(tái)網(wǎng)站成都競(jìng)價(jià)托管多少錢
  • 酒店預(yù)定網(wǎng)站建設(shè)方案北京疫情太嚴(yán)重了
  • 網(wǎng)站建設(shè)專項(xiàng)檢查上海seo怎么優(yōu)化
  • 怎么用自己的電腦做服務(wù)器發(fā)布網(wǎng)站濟(jì)南做seo排名
  • 百度網(wǎng)站提交入口百度怎么發(fā)外鏈
  • 高仿服裝網(wǎng)站建設(shè)東莞關(guān)鍵詞seo優(yōu)化
  • 微信公眾平臺(tái)小程序是什么寧波seo網(wǎng)站服務(wù)
  • 北京做網(wǎng)站站長(zhǎng)工具麻豆
  • 做室內(nèi)裝修的網(wǎng)站seo排名優(yōu)化培訓(xùn)價(jià)格
  • 酷炫網(wǎng)站設(shè)計(jì)風(fēng)格北京做網(wǎng)站推廣
  • 網(wǎng)站建設(shè)這個(gè)工作怎么樣天津建站網(wǎng)
  • 公司網(wǎng)站建設(shè)方案詳細(xì)方案軟文推廣產(chǎn)品
  • 北京網(wǎng)站開發(fā)網(wǎng)站開發(fā)公司seo網(wǎng)站優(yōu)化培訓(xùn)找哪些
  • 通遼做家教的網(wǎng)站seo營(yíng)銷優(yōu)化
  • 貼吧廣告投放seo前線
  • 武漢網(wǎng)站建設(shè) 網(wǎng)站制作市場(chǎng)營(yíng)銷的策劃方案
  • 做外包的網(wǎng)站有哪些優(yōu)化大師官方下載
  • 高端定制網(wǎng)站開發(fā)網(wǎng)站模板設(shè)計(jì)關(guān)鍵詞搜索愛站網(wǎng)
  • seo 服務(wù)如何優(yōu)化網(wǎng)站
  • 高校后勤網(wǎng)站建設(shè)要求二級(jí)域名和一級(jí)域名優(yōu)化難度
  • 網(wǎng)站建設(shè)資料準(zhǔn)備標(biāo)準(zhǔn)江西seo推廣軟件
  • 網(wǎng)站建設(shè)免湖南seo網(wǎng)站開發(fā)
  • 設(shè)計(jì)公司網(wǎng)站建設(shè)2022年最近十大新聞
  • 唐山房產(chǎn)網(wǎng)站建設(shè)東莞網(wǎng)絡(luò)推廣平臺(tái)
  • 微信網(wǎng)站建設(shè)公司衡水seo優(yōu)化
  • 怎么做彩票網(wǎng)站seol英文啥意思
  • 棗莊網(wǎng)站設(shè)計(jì)怎么有自己的網(wǎng)站