如何在消费者线程中组织等待来自主线程的数据

how to organize waiting for data from main thread in consumer thread

本文关键字:线程 数据 等待 消费者      更新时间:2023-10-16

主线程从套接字读取数据并将其存储在队列中。第二个线程将此数据写入磁盘文件。但是如果第二个写数据的速度比第一个读数据的速度快,那么如何组织等待呢?

我想用信号量来做,但是我如何增加信号量计数器,然后下一个数据块读到队列中。我知道如何在第二个线程中减少它

听起来像一个'经典'的生产者-消费者队列。您需要一个线程安全的队列和一个初始化为0的信号量,以便对队列中的对象进行计数。如果没有线程安全的队列,则另一个初始化为1的信号量(或互斥量)可以保护队列免受多次访问。

本质上,在生产者中,malloc一个缓冲区结构体,从套接字中读取数据,将其地址推入线程安全队列,给信号量发信号。在consumer中,等待信号量,从队列中弹出缓冲区地址,将数据写入磁盘文件,释放缓冲区。

在c++中,可以用buffer class和new/dispose代替buffer struct和malloc/free。套接字/磁盘操作可以是缓冲区类的方法。

祝好,马丁