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

时间:2011-08-22 15:05:34

标签: c++ multithreading synchronization

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

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

1 个答案:

答案 0 :(得分:2)

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

基本上,在生成器中,malloc是一个缓冲区结构,从socket读取数据,将其地址压入线程安全队列,发出信号信号。在消费者中,等待信号量,从队列中弹出缓冲区地址,将数据写入磁盘文件,释放缓冲区。

您可以使用C ++替换缓冲区类和new / dispose作为缓冲区结构和malloc / free。然后,套接字/磁盘操作可以是缓冲类的方法。

RGDS, 马丁