c++ barrier 使用详解

c++ barrier 使用详解

std::barrier c++20

  • 头文件 #include <barrier>
  • 作用:一般被用来协调多个线程,在所有线程都到达屏障点之后,才允许它们继续执行,对于需要线程间同步的并行算法和任务来说非常有用。
  • 使用步骤:
    • 创建 barrier 对象,并指定期待计数;
    • 在线程中调用 arrive 或者 arrive_and_wait 方法,使期待计数减一;
    • 当期待计数减为 0 后,即代表所有线程都已到达屏障点,barrier 会解除所有阻塞在屏障点上的线程并重置期待计数。
  • 注意事项:
    • 不同于 latch ,barrier 可重用;
    • 同时调用 barrier 的成员函数,除了析构函数,不引入数据竞争;
    • 在同一个线程中,可以多次减少期待计数;

std::barrier 成员函数

  • arrive:到达屏障并减少期待计数。
  • wait:阻塞当前线程,直至期待计数减为 0。
  • arrive_and_wait:到达屏障并把期待计数减少一,然后阻塞直至期待计数减为 0。
  • arrive_and_drop:到达屏障并把期待计数减少一并使后续阶段的初始期待计数减一。

使用示例

  • 线程 1 和 线程 2 先各自执行一些任务,然后在屏障点上等待直到所有线程抵达后再继续执行后续代码:

    #include <cstdio>
    #include <thread>
    #include <vector>
    #include <barrier>
    
    using namespace std::literals;
    
    constexpr int num_threads = 2;
    std::barrier barrier(num_threads);
    std::vector<int> v1;
    std::vector<int> v2;
    
    void f1()
    {
        for (int i = 0; i < 2; i++) {
            v1.push_back(i);
            // 到达屏障点并阻塞
            barrier.arrive_and_wait();
            // 所有线程都到达屏障点后,继续执行
            printf("v2[%d] = %d\n", i, v2[i]);
        }
    }
    
    void f2()
    {
        for (int i = 0; i < 2; i++) {
            v2.push_back(i);
            // 到达屏障点并阻塞
            barrier.arrive_and_wait();
            // 所有线程都到达屏障点后,继续执行
            printf("v1[%d] = %d\n", i, v1[i]);
        }
    }
    
    
    int main()
    {
        std::jthread t1(f1);
        std::jthread t2(f2);
        return 0;
    }
    
  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于Barrier的安装和使用,你可以按照以下步骤进行操作: 1. 下载Barrier软件:你可以在Barrier的官方网站(https://github.com/debauchee/barrier)上找到最新的软件版本。根据你的操作系统选择合适的下载文件。 2. 安装Barrier:下载完成后,按照所选操作系统的安装步骤进行安装。通常情况下,你只需要双击安装程序并按照提示进行操作即可完成安装。 3. 配置Barrier:安装完成后,打开Barrier软件。你将看到一个主界面,其中包含了服务器和客户端的配置选项。 4. 配置服务器:在主界面中,选择“Configure Server”(配置服务器)选项。在服务器配置界面中,设置一个服务器名称,并选择要共享的屏幕位置。点击“Apply”(应用)保存配置。 5. 配置客户端:在主界面中,选择“Configure Client”(配置客户端)选项。在客户端配置界面中,输入服务器的IP地址或主机名,并设置客户端的名称。点击“Apply”保存配置。 6. 启动服务:在主界面中,点击“Start”(启动)按钮来启动Barrier服务。此时,服务器和客户端已经成功配置。 7. 连接设备:在客户端上运行Barrier,并在服务器列表中选择你配置的服务器。点击“Connect”(连接)按钮,客户端将会连接到服务器,并共享服务器的鼠标和键盘。 8. 调整设置(可选):你可以在Barrier的设置中进一步调整共享屏幕、鼠标和键盘的行为。例如,你可以设置屏幕共享的方向、鼠标滚动的速度等。 通过以上步骤,你可以完成Barrier的安装和配置,并且实现鼠标和键盘的共享。希望能对你有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注的罗哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值