我是做行业软件的所以经常会接触到对数据进行实时采集的问题。一般的问题是,一个线程读取数据,其他的线程对数据进行处理(如画出实时曲线,将数据存入文件等等)。这涉及到两方面问题.1,线程的同步问题—典型的生产者和消费者的问题;2,数据结构问题。即将采集的数据以什么形式存储并由消费者进行读取。
下面我将对这两个问题和大家一起探讨一下。相信大家对生产者消费者问题并不陌生。在读书的时候我们采用系统体提供的p,v解决,这是对同一临界区资源同时进行读写需要的保护措施,本工程使用缓冲队列,故不需要对临界区进行加锁 。马上我会实现双缓存的版本。在此版本中我会实现对临界区的加减锁。
读取的数据要存储到相应的数据结构中,可以有很多种选择,比如存成任务缓冲队列(以链表实现)其中大部分工程使用循环队列用于一写多读,写线程将数据写入队列,读线程从队列中读取。或者实现双缓存方法,即写线程写满一个缓存读线程来取数据同时写线程将数据写入另一个缓存。
具体的实现如下: