[发明专利]一种多核环境下基于数组结构的无等待栈操作方法有效
申请号: | 201611186222.2 | 申请日: | 2016-12-20 |
公开(公告)号: | CN106843806B | 公开(公告)日: | 2019-04-26 |
发明(设计)人: | 彭亚琼;郝志宇;刘永继;李大辉;崔磊 | 申请(专利权)人: | 中国科学院信息工程研究所 |
主分类号: | G06F9/30 | 分类号: | G06F9/30;G06F9/52 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙) 11200 | 代理人: | 司立彬 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 多核 环境 基于 数组 结构 等待 操作方法 | ||
本发明公开了一种多核环境下基于数组结构的无等待栈操作方法。本方法为:1)主程序初始化代表栈的全局数组,即分配一个包含N个数组元素的段;2)启动m个线程,每个线程维护一存储自己运行状态的变量hi;该变量hi包含指针next、入栈伙伴指针和出栈伙伴指针;3)利用变量hi中的next指针,将该m个线程的运行状态链接为环状;4)该主程序等待接收线程对栈进行操作的请求;如果线程的操作请求为入栈请求,则执行无等待入栈操作;如果为出栈请求,则执行无等待出栈操作;如果销毁请求,则该主程序首先销毁栈,然后包括主程序在内的所有线程结束执行。本发明具有高并行度、低复杂度,为线程的操作提供无等待的进度保障。
技术领域
本发明属于并行算法技术领域,具体涉及到一种多核环境下基于数组结构的无等待栈操作方法。
背景技术
随着多核处理器的迅猛普及,计算机编程模式由传统串行编程模式向线程级并行编程模式转变,以发挥出与核数量的增长相一致的实际效果。共享数据结构(例如:栈和队列)作为线程间通信的常用手段,是多线程应用的重要组成结构。为了确保多线程应用高效运行于多核平台,需要设计高性能的并发数据结构。此外,进度保障是并发数据结构需要提供的另一大特性。并发数据结构通常可分为阻塞和非阻塞这两大类。如果线程对阻塞数据结构进行操作,它可能首先需要等待另一个线程操作的完成。因此,阻塞数据结构会引发诸如死锁和优先级反转等问题。
非阻塞数据结构可以确保被暂停的操作不会阻塞其它操作,从而避免上述阻塞数据结构所带来的问题。非阻塞数据结构提供以下三个层次的进度保障:
无阻碍:保障系统中一个孤立运行的线程能够在有限步骤内完成任意操作;
无锁:保障系统中若干线程能够在有限步骤内完成任意操作;
无等待:保障系统中每个线程都能够在有限步骤内完成任意操作。
无等待是并发数据结构可以提供的最强进度保障,该特性对于多线程应用和操作系统来说弥足珍贵,尤其是当它们运行于高争用环境下的时候(例如:云计算环境)。但是,无等待数据结构的设计往往比较复杂,且性能较低下。例如,当前表现最好的无等待栈算法的执行速度,甚至低于一种基于结合技术的阻塞栈算法。
发明内容
本发明公开了一种多核环境下基于数组结构的无等待栈操作方法,其目的在于保持高效执行的前提下,为线程的操作提供无等待的进度保障。栈的基本操作包括入栈、出栈、取栈顶元素、判断空等;其中,仅入栈和出栈操作会对栈进行修改;因此,与现有并行栈算法类似,本发明仅关注入栈和出栈操作;本领域的技术人员容易理解,本发明经过简单修改就能支持栈的其它操作。
本发明公开的多核环境下基于数组结构的无等待栈操作方法总体流程如下:
(1)主程序初始化代表栈的全局数组,即分配一个包含N个数组元素的段,用于后续存放入栈数据;其中,每个数组元素包含用于存储入栈数据的变量val,指向入栈请求的指针push,以及指向出栈请求的指针pop,push和pop的初始值均为0;
(2)设置初始值为0的全局共享变量T和pc;其中,T为栈顶索引,pc用于指示后续出栈请求的标识符;
(3)启动m个线程,每个线程thi(i=0,1,2,…,m-1)维护一个handle结构类型的变量hi来存储自己的运行状态,该结构还包含指针next、入栈伙伴指针和出栈伙伴指针;其中,每个线程的入栈伙伴指针和出栈伙伴指针均初始指向本线程;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所,未经中国科学院信息工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611186222.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:提扣
- 下一篇:包装箱(中老年黑牛奶)