日志
-
2017-07-24 22:02
-
前节写的Repository类只能存储一种类型,这一节考虑写成模版类,同时修改TakeData()接口,可以设置超时时间。
阅读全文»分类:默认分类|回复:0|浏览:631
具体代码如下:
复制代码#ifndef REPOSITORY_H
#define REPOSITORY_H
#include <mutex>
#include <condition_variable>
#include <atomic>
#include <QQueue>
#include <QDebug>
template<typename T>
class Repository
{
public:
Repository()
{
m_queue_max_length = 100;
m_bStop = false;
}
void AddData(const T &data)
{
std::unique_lock<std::mutex> lock( ..
-
2017-07-11 23:39
-
前言
阅读全文»分类:默认分类|回复:0|浏览:749
上一节实现了一个单生产者单消费者模式功能,现在再如何实现一个多生产者多消费者的模式。
设计思路
多生产者多消费者跟单个消费者生产者比较起来,只是多个几个线程去生产数据,去获取数据,
那我只需要保证多个线程“存入数据”是线程安全的,多个线程“读取数据”是线程安全的就可以了。
下面就需要去写测试代码验证下师傅满足这些要求。
代码分析
首先查看下获取数据函数是 ..
-
2017-07-10 22:46
-
前言
阅读全文»分类:C++|回复:0|浏览:448
最近做公司项目遇到一个问题,加载20万的日志文件,解析后写入数据库中。做完后发现读文件、解析、写入数据依次搞下来,速度实在是太慢。
所以学习用多线程的来完成这个工作,考虑用生产者消费者模式来完成。
设计思路:
写一个数据存储类,提供“存入数据”、“取走数据”两个接口,两个接口保证一次只能有一个线程去操作数据。数据满时阻塞“存入数据”接口,等待数据被取走,同理数据空时,阻塞“取走数据”接口,等待存入数据。
具体实现:
存储数据使用QQueue<T>类,线程同步使用C++11 标准库 std::mutex、std::con ..