gpt4 book ai didi

c++ - 为什么 C++20 屏障中存在单独的到达和等待?

转载 作者:行者123 更新时间:2023-12-01 13:21:33 24 4
gpt4 key购买 nike

C++20 std::barrier arrive_and_wait方法,这几乎是每个同步屏障实现所具有的。
但它也有单独的 arrivewait .为什么会有这些功能?

最佳答案

好的,所以您有一堆线程必须执行某种同步任务。这些任务分为几个阶段:一个阶段的任务将使用前一阶段任务产生的数据,并且必须在任何下一阶段工作开始之前完成前一阶段的所有工作。任何需要前一阶段数据的工作都应称为“同阶段”工作。
但是,假设并非您需要做的所有事情实际上都需要来自前一阶段的数据。线程可以执行某些单独的工作项,但不会从前一阶段读取数据。我们称之为“异相”工作。
如果您在调用 arrive_and_wait 之前尝试执行此异相工作,那么即使您完成了他们正在等待的实际工作,您也可能阻止所有其他线程执行某些操作。根据同相和异相工作之间的平衡,这可能会浪费很多性能。
所以如果一个线程已经完成了它的同相工作并且有一些异相工作要做,它可以 arrive .如果其他线程也完成了同阶段工作,这可能会释放所有其他线程。然后线程可以处理一些异相工作,可能与下一阶段完成的工作异步。一旦异相工作完成,线程可以 wait在通过调用 arrive 生成的 token 上,如果下一阶段已经开始,它将无阻塞地返回。
事实上,如果同相工作量远小于异相工作量,那么这种模式意味着线程几乎从不阻塞。屏障只是作为一种多线程原子排序操作,而不是阻塞操作。

关于c++ - 为什么 C++20 屏障中存在单独的到达和等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63119302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com