我有两个函数,让我们称它们为producer(std::ostream& output)
和consumer(std::istream& input)
,我需要将生产者的输出链接到消费者。现在我这样做:
std::stringstream temp;
producer(temp);
consumer(temp);
这有两个半明显的缺点。首先,对我来说较小的问题是内存使用情况。生产者生成大约20MB的数据,这一切都必须存储。更大的问题是速度。消费者通常只需要从输入流中读取几个字节,但生产者需要生成所有字节。此外,这对生产者生成的潜在无限流也无效。
我是否可以使用任何魔术适配器而不是stringstream
只能缓冲所需的最小数据量然后在生产者和消费者之间切换?
我有一个想法(非常具体的一个:-))这种协同程序的东西可能以某种方式用setjmp
和longjmp
完成,但我从未使用过这些函数和我觉得这会有一些问题。
我只是出于好奇而问这个问题,因为我喜欢简单的解决方案。我知道我可以通过将producer从函数直接转换为istream来解决这个问题。
编辑:我的hypotetical适配器的行为是这样的:
这里不应该有线程。