美文网首页CPP
使用 barrier 和 latch 实现线程同步

使用 barrier 和 latch 实现线程同步

作者: 顽强的猫尾草 | 来源:发表于2018-08-14 16:42 被阅读29次

锁存器(latch)是一种线程协调机制,允许一个或多个线程阻塞,直到某个操作完成。 单个 latch 是一次性对象,一旦操作完成,就无法重复使用。

  void DoWork(threadpool* pool) {
    boost::latch completion_latch(NTASKS);
    for (int i = 0; i < NTASKS; ++i) {
      pool->add_task([&] {
        ...
        // countdown--
        completion_latch.count_down();
      }));
    }
    // block until countdown to zero
    completion_latch.wait();
  }

栅栏(barrier)是一种线程协调机制,允许多个线程阻塞,直到操作完成。 与 latch 不同,barrier 可重复使用,一旦操作完成,线程可以重复使用相同的 barrier。 因此它对于管理由多个线程处理的重复任务很有用。

  void DoWork(threadpool* pool) {
    boost::barrier barr(NTASKS);
    for (int i = 0; i < NTASKS; ++i) {
      pool->add_task([&] {
        ...
        // block until all work get to here
        barr.wait();
      }));
    }
    // block until countdown to zero
  }

这两种同步方式的选择,就看你是想要阻塞所有线程等待操作(latch),还是阻塞在主线程的一个点而子线程可以灵活执行(barrier)。

相关文章

  • 使用 barrier 和 latch 实现线程同步

    锁存器(latch)是一种线程协调机制,允许一个或多个线程阻塞,直到某个操作完成。 单个 latch 是一次性对象...

  • APUE//线程同步3

    使用条件变量进行线程同步 barrier,屏障

  • java多线程并发系列之闭锁(Latch)和栅栏(CyclicB

    -闭锁(Latch) 闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态。通俗的讲就是,...

  • GCD-线程栅栏

    GCD的线程栅栏分为同步栅栏(dispatch_barrier_sync)和异步栅栏(dispatch_barri...

  • 多线程问题

    就是一批线程结束后才能继续做其它事情,怎么实现? 1、使用countdownlatch latch =new co...

  • GCD线程同步的研究

    在GCD中关于线程同步的问题,有很多中实现方式:Group函数,barrier函数,信号量等;这里只是简单研...

  • 线程锁

    探讨iOS开发中各种锁使用NSCondition实现多线程同步 NSCondition是线程同步, 阻塞线程。 取...

  • Barrier与多线程

    程序世界的barrier 同步屏障(Barrier)是并行计算中的一种同步方法。对于一群进程或线程,程序中的一个同...

  • [C# 线程处理系列]专题四:线程同步

    目录: 一、线程同步概述 二、线程同步的使用 三 、总结 一、线程同步概述 前面的文章都是讲创建多线程来实现让我们...

  • Java线程同步方法

    一、同步方法 除了使用synchronized代码块实现线程的同步外,我们还有同步方法。 使用synchroniz...

网友评论

    本文标题:使用 barrier 和 latch 实现线程同步

    本文链接:https://www.haomeiwen.com/subject/phfkbftx.html