日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > C++ 實現線程安全的任務隊列

C++ 實現線程安全的任務隊列

來源:程序員人生   發布時間:2015-03-20 09:07:00 閱讀次數:5115次

C++ 實現線程安全的任務隊列

flyfish 2015⑶⑹

1、3個接口函數說明



1 add 新增任務
2 get_nonblocking 非阻塞獲得任務或空任務
3 get_blocking 阻塞獲得任務
頭文件
#pragma once #include <deque> #include <boost/thread/mutex.hpp> #include <boost/thread/locks.hpp> #include <boost/thread/condition_variable.hpp> //任務 網絡發送任務使用的結構,通常有1個發送緩沖區和1個實際要發送的長度 class task { public: unsigned char data[2048]; unsigned int len;//實際發送長度 task::task(); task::~task(); }; class task_queue { private: std::deque<task> tasks; boost::mutex tasks_mutex; boost::condition_variable cv; public: task_queue::task_queue(); task_queue::~task_queue(); void add(const task& task); std::tuple<bool,task> get_nonblock(); task get_block(); };





實現文件

#include "task_queue.h" //task task::task() { for (int i=0;i<2048;i++) data[i] = 0; } task::~task() { } // task queue task_queue::task_queue() { } task_queue::~task_queue() { } void task_queue::add(const task& task) { boost::unique_lock<boost::mutex> lock(tasks_mutex);//不允許其他線程履行 tasks.push_back(task); lock.unlock(); cv.notify_one();//通知其他線程繼續 } std::tuple<bool,task> task_queue::get_nonblock() { boost::lock_guard<boost::mutex> lock(tasks_mutex); std::tuple<bool,task> ret; if (!tasks.empty()) { ret=std::make_tuple(true,tasks.front()); tasks.pop_front(); } else { task tmp; ret=std::make_tuple(false,tmp); } return ret; } task task_queue::get_block() { boost::unique_lock<boost::mutex> lock(tasks_mutex); while (tasks.empty()) { cv.wait(lock); } task ret=tasks.front(); tasks.pop_front(); return ret; }





2 解釋
1 notify_one用于喚醒1個等待該條件(condition)產生的線程
2 可使用boost::mutex::scoped_lock 替換boost::unique_lock<boost::mutex>,可以免遺漏unlock
例如
boost::mutex mutex_; try { mutex_.lock(); //do something mutex_.unlock(); } catch(...) { mutex_.unlock(); return 0; }


使用boost::mutex::scoped_lock就能夠避免catch遺漏unlock


3 boost::unique_lock僅僅比boost::lock_guard附加1些功能




4 如果任務在獲得以后不刪除,就能夠使用多讀1寫方式,就要實現讀寫鎖


讀操作產生時: 寫線程停止操作,允許多個線程同時讀操作
寫操作產生時: 只允許同1時刻只有1個線程寫操作,其他不管讀寫線程全部停止。
代碼類似
typedef boost::shared_lock<boost::shared_mutex> r_lock; typedef boost::unique_lock<boost::shared_mutex> w_lock; boost::shared_mutex mutex_; void read() { r_lock lock(mutex_); //do something } void write() { w_lock lock(mutex_); //do something }

以上程序在VC2010 Boost庫下編譯通過


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 99久久精品视频免费 | 日本久久电影 | 久久精品亚洲精品 | 激情在线视频 | 成人伊人 | 国产精品久久久久久久久久免费动 | 日韩精品影院 | 色婷婷综合久久久中字幕精品久久 | 这里只有精品久久 | 精品日韩中文字幕 | 欧美在线观看一区 | 欧洲亚洲女同hd | 波多野av在线 | 国产h视频在线观看 | 亚洲二区在线观看 | 国产在线啪 | 玖玖视频在线 | 日韩高清影片在线观看 | 日韩精品福利视频 | 福利二区 | 亚洲免费大全 | 国产精品久久av | 国产青青 | 亚洲a一区| 成人av福利 | 色网在线免费观看 | 一区二区三区av在线 | 91久久久久久久久久久 | 黄在线播放| 久久国产麻豆 | 91久久国产综合久久91精品网站 | 日本激情网 | 午夜在线一区 | 亚洲第一天堂无码专区 | 国产精品国产三级国产aⅴ无密码 | 麻豆视频免费版 | 久久福利在线 | 99精品国产高清在线观看 | 免费日本视频 | 日韩大片 | 五月香婷婷|