一种基于原子操作的设备io队列方法_2

文档序号:8298873阅读:来源:国知局
否为空,不为空就将该链接指针的值放入临时结点包含的链接指针里,使临时结点与第二个结点连接起来。至此第一个结点就出队列了。
[0016]如附图6、附图7所示:如果第一个结点的链接指针为空,就使用原子比较并交换操作判断队列尾指针是否也指向第一个结点,如果尾指针指向第一个结点就原子化的将其改为指向临时结点。
[0017]如附图8、附图9、附图1 O所示:当使用原子比较并交换操作判断到尾指针不指向第一个结点时就不会将尾指针的值改为指向临时结点的值,因为这时有一个生产者正在入队一个新结点。这时应该等待第一个结点的链接指针被更新为指向第二个结点,然后将临时结点的链接指针指向第二个结点。
[0018]本发明涉及到计算机专业领域里原子操作的概念,对于本专业领域的技术人员,能够熟练的在不同处理器平台上使用该平台的相关机器指令实现这些原子操作。例如本发明中使用的原子交换操作和原子比较并交换(CAS)操作在Intel x86处理器平台上可以用XCHG指令和LOCK CMPXCHG指令实现,其中XCHG指令的功能也可用LOCK CMPXCHG指令加条件循环来替代,且不同的处理器硬件平台实现这些原子操作的机器指令是不同的,不能将这种差异解释为超出本发明的范畴。
[0019]名词解释
锁机制:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)—个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。
[0020]独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。
[0021]CAS 操作
上面的乐观锁用到的机制就是CAS,Compare and Swap。
[0022]CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
[0023]在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。
[0024]生产者和消费者:在线程世界里,生产者就是提交数据的线程,消费者就是处理数据的线程。在多线程开发当中,如果生产者提交速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续提交数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。
[0025]生产者消费者模式:生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
【主权项】
1.一种基于原子操作的设备1队列方法,该方法的队列由首指针、尾指针、数据结点和临时结点构成;首指针指向队列的第一个结点,尾指针指向队列的最后一个结点;每个结点包含一个链接指针,结点与结点之间通过链接指针连接起来,第一个结点的链接指针指向第二个结点,最后一个结点的链接指针为空;其特征在于进行出队列操作时需要临时结点的参与,将队列中的第一个数据结点替换成临时结点,使首指针指向临时结点,并将第一个数据结点取出;同时用原子比较并交换操作判断尾指针是否也指向第一个数据结点,如果尾指针指向第一个数据结点则原子化的将尾指针替换成指向临时结点的指针,如果尾指针不指向第一个数据结点就将临时结点包含的链接指针指向第二个数据结点。
2.根据权利要求1所述的一种基于原子操作的设备1队列方法,其特征是:入队操作先将新结点的指针与队列尾指针进行原子交换操作,原子化的将队列尾指针替换成指向新结点的指针同时将原尾结点的指针取出,然后将原尾结点包含的链接指针指向新结点;如果原尾结点的指针是空指针则新结点是队列中的第一个结点,应将队列首指针指向新结点同时表示提交该结点的生产者获得了队列的控制权;入队操作完成,获得队列控制权的生产者能转变为消费者进行出队操作,未获得控制权的生产者不能进行这种转变。
3.根据权利要求1所述的一种基于原子操作的设备1队列方法,其特征是:队列操作还包括释放控制权的操作;释放控制权的操作就是从队列中移除第一个结点的操作,需要使用原子比较并交换操作判断尾指针是否指向第一个结点,如果尾指针指向第一个结点则原子化的将尾指针替换成空指针,如果尾指针不指向第一个结点就将首指针指向第二个结点。
【专利摘要】一种基于原子操作的设备IO队列方法,该队列由首指针、尾指针、数据结点和临时结点构成,入队操作可以由多个生产者同时进行;出队操作只能由一个消费者进行;出队操作需要一个临时结点参与,替换队列中的第一个数据结点并将第一个数据结点取出,在此过程中使用原子比较并交换(CAS)操作判断尾指针是否也指向第一个数据结点,如果是就将尾指针指向临时结点;该队列还包括释放控制权的操作,释放控制权就是移除第一个结点,需要使用原子比较并交换(CAS)操作判断尾指针是否也指向第一个结点,如果是就将尾指针改为空指针,如果移除第一个结点使队列被清空则表示控制权被释放。
【IPC分类】G06F9-44
【公开号】CN104615445
【申请号】CN201510092506
【发明人】龙恢, 管志坚
【申请人】长沙新弘软件有限公司
【公开日】2015年5月13日
【申请日】2015年3月2日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1