繁体   English   中英

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

[英]how to organize waiting for data from main thread in consumer thread

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

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

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

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

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

Rgds,马丁

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM