我正在使用线程队列,消费者从队列获取项目,生产者将项目放入队列。创建的消费者数量来自用户输入。我尝试了两种方法。第一个版本效果很好,但第二个版本没有。由于用户输入约束,我无法使用第一个版本。实际上我并没有得到两者之间的差异。第一个是同时创建三个线程而第二个是逐个创建吗?有什么线索吗?
auto c1 = async(launch::async, consumer);
auto c2 = async(launch::async, consumer);
auto c3 = async(launch::async, consumer);
for(int i = 1; i <= 3; i++)
auto c1 = async(launch::async, consumer);
答案 0 :(得分:1)
两者在某种程度上是相同的,因为它们都是一个接一个地启动三个异步任务。
在某种程度上,两者都是不同的,因为循环变量c1
被限制在循环内的生命周期中,并且每次循环迭代时都会超出范围(并被破坏)。并且它可能会产生重大影响:对象c1
被破坏,必须等待consumer
函数完成才能被破坏。