多生产者,使用char []的单个消费者队列

时间:2017-11-09 13:07:08

标签: c++ c++11 queue critical-section circular-buffer

我项目的代码库当前包含一个多生产者,单个消费者数据编写者。它使用2个循环缓冲区和几个CRITICALSECTION锁来写入可变大小的数据流,这些数据流作为char *传入,具有字节数。它从数十个编写char *的线程中获取数据,并将它们写入二进制文件。

我正在寻求改进这种设计,但似乎所有在网上编写的实现都涉及简单的原始类型,而不是编写char数组。任何人都可以建议我进行研究,因为我的google-fu非常弱吗?

我的测试实现基本上是:

Record(char* data, uint32_t byte_count)
{
    c_section.Lock();  //CCriticalSection, std::mutex, whatever
    recording_buffer.write(data, byte_count);  //in house circular buff
    c_section.Unlock();
}
FileThread()
{
    while(run_thread)
    {
        if(recording_buffer.size() > 0)
        {
            c_section.Lock();
            //read the entire size of the filled bytes of the buffer
            //multiple entries are written to the file at once.
            write_to_file(recording_buffer.read(recording_buffer.size()), recording_buffer.size();
            c_section.Unlock();
        }
        std::this_thread::sleep_for(10ms);
    }
}

0 个答案:

没有答案