如何在消费者线程中组织等待来自主线程的数据
how to organize waiting for data from main thread in consumer thread
主线程从套接字读取数据并将其存储在队列中。第二个线程将此数据写入磁盘文件。但是如果第二个写数据的速度比第一个读数据的速度快,那么如何组织等待呢?
我想用信号量来做,但是我如何增加信号量计数器,然后下一个数据块读到队列中。我知道如何在第二个线程中减少它
听起来像一个'经典'的生产者-消费者队列。您需要一个线程安全的队列和一个初始化为0的信号量,以便对队列中的对象进行计数。如果没有线程安全的队列,则另一个初始化为1的信号量(或互斥量)可以保护队列免受多次访问。
本质上,在生产者中,malloc一个缓冲区结构体,从套接字中读取数据,将其地址推入线程安全队列,给信号量发信号。在consumer中,等待信号量,从队列中弹出缓冲区地址,将数据写入磁盘文件,释放缓冲区。
在c++中,可以用buffer class和new/dispose代替buffer struct和malloc/free。套接字/磁盘操作可以是缓冲区类的方法。祝好,马丁
相关文章:
- 在cuda线程之间共享大量常量数据
- 将线程中的数据存储到全局容器的最佳方法?
- 线程之间的实时数据共享
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 在线程函数中处理数据向量时进行线程竞速
- 使来自线程的数据流对所有其他线程都可读
- 简单使用 std::atomic 在两个线程之间共享数据
- 为什么添加延迟会提高此多线程环境中的数据吞吐量?
- 跨线程共享数据集与拆分每个线程的数据
- 标准 cpp 数据结构和线程互斥锁?
- 在std::线程中使用已分配的结构数据
- 多个线程将数据发送到数组C++
- Qt C++ - 如何将数据从工作线程传递到主线程?
- 在使用 std::cout 和多线程程序中如何避免数据竞争<iomanip>?
- 充分私有化 OpenMP 线程中的数据
- 用于在C++中计算用户数据的线程
- 在不减慢线程速度的情况下保存大量数据
- 线程数据封装最佳实践
- Apache 崩溃并显示错误 R6016 没有足够的空间来存储线程数据