ROS源码学习 十四、Concurrent(1)j

本文详细介绍了ROS并发包中的CancellableLoop和CircularBlockingDeque。CancellableLoop是一个可取消的线程模型,允许在中断时执行自定义逻辑。CircularBlockingDeque是环形双向阻塞队列,常用于ROS的并发数据结构,提供固定大小的缓冲区功能。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

2021SC@SDUSC

一、简介

        从本节开始,我们将分析Concurrent包,该包为ROS执行各种并发逻辑所依赖的各种类的集合.其中包括线程安全的数据结构、ROS自定义的循环执行线程和ROS封装的Java线程池.

二、CancellableLoop

        CancellableLoop为ROS自定义的一个线程模型,该线程允许被中断,且能够在被中断时执行一系列的自定义逻辑.

        

public abstract class CancellableLoop implements Runnable {

  private final Object mutex;


  private boolean ranOnce = false;

  private Thread thread;

  public CancellableLoop() {
    mutex = new Object();
  }

  @Override
  public void run() {
    synchronized (mutex) {
      Preconditions.checkState(!ranOnce, "CancellableLoops cannot be restarted.");
      ranOnce = true;
      thread = Thread.currentThread();
    }
    try {
      setup();
      while (!thread.isInterrupted()) {
        loop();
      }
    } catch (InterruptedException e) {
      handleInterruptedException(e);
    } finally {
      thread = null;
    }
  }


  protected void setup() {
  }


  protected abstract void loop() throws InterruptedException;


  protected void handleInterruptedException(InterruptedException e) {
  }


  public void cancel() {
    if (thread != null) {
      thread.interrupt();
    }
  }


  public boolean isRunning() {
    return thread != null && !thread.is

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值