更新时间:2018-04-05 15:11:12浏览次数:1+次
容器的问题解决了,那么接下来还需要继续分析。在此模型中,生产者一边生产数据,消费者一边消费数据,但是就算是再多的数据,也会出现获取完的时候,那么我们此时如何标记生产者已经没有数据再能生产了呢?如何将这个信息通知给消费者?不能简单地通过队列中数据的数量来判断,由于我们是一边消费一边生产的,因此队列中的数据量就会不准。我们可以引入一个线程安全的队列来记录每一次生产者生产的数据量。然后再消费者那边做一个判断,如果此时的标记队列的数量恰好就是总的数据量,那么关闭生产者线程,同时,当消费者线程消费完容器阻塞队列中的数据的时候,就完成了所有的操作,此时跳出所有的循环,不再启用线程处理。在这里我们引入了一个第三方的队列来判断,从空间以及时间来看,增加了一点内存,也耗费了大概几百ms到1s左右的时间,可以忽略,但是我们也有第二种方法来实现,那就是利用原子锁,原子锁本就是为了维护值类型即整型之类的线程安全性,我们完全可以原子锁来做实现,而且是无锁操作。
具体demo,请看 Interlocked在多线程下进行原子操作无锁无阻塞的实现线程运行状态判断
相关资讯