C ++ / CLI高效多线程循环缓冲区

时间:2009-12-15 12:28:29

标签: multithreading synchronization c++-cli buffer

我正在开发的C ++ / CLI GUI中有四个线程:

  1. 收集原始数据
  2. GUI本身
  3. 后台处理线程,它接收原始数据块并生成有用信息
  4. 充当控制器,连接其他三个线程
  5. 我已经将原始数据收集器工作并将结果发布到控制器,但下一步是存储所有这些结果,以便GUI和后台处理器可以访问它们。

    新的原始数据以常规(频繁)间隔一次输入一个结果。 GUI将在到达时访问每个新项目(控制器宣布新数据,然后GUI访问共享缓冲区)。数据处理器将定期读取缓冲区块(例如,值为秒)并生成新结果。如此有效,有一个生产者和两个消费者需要访问。

    我一直在寻找,但是CLI提供的东西都没有听起来那么有用,所以我正在考虑自己动手。一个共享的循环缓冲区,它允许收集器的写锁和gui和数据处理器的读锁。只要没有写入缓冲区的那些部分,这将允许多个线程读取数据。

    所以我的问题是:.net库中是否有任何可以实现此目的的简单解决方案?我是不是因为考虑自己动手而疯了?有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

是否可以重新解释问题,以便:

  1. 收集器收集新数据点......
  2. ...传递给Controller。
  3. Controller触发GUI“NewDataPointEvent”......
  4. ...并将数据点存储在数组中。
  5. 如果阵列已满(或准备进行处理),Controller会将阵列发送到处理器......
  6. ...并开始一个新阵列。
  7. 如果线程之间传递的值在共享后未被修改,这可能会使您无需使用自定义线程安全集合类,并减少所需的锁定量。