一种多线程链表操作系统及方法技术方案

技术编号:34956861 阅读:8 留言:0更新日期:2022-09-17 12:35
本发明专利技术属于数据管理技术领域,具体涉及一种多线程链表操作系统及方法,所述的系统包括定义数据结构模块,该模块通过定义数据结构io_data以及该种链表数据结构的list_new列表;多线程访问模块,该模块用于当多个线程需要将新的io_data数据挂载到链表上时,嵌入汇编语言通过对list_new链表中tail变量的原子性互斥操作,完成数据的多线程并发一致性访问,规避多线程并发问题,其次在取得独占权的同时完成新io_data new的入表操作,节省时间提高效率。提高效率。提高效率。

【技术实现步骤摘要】
一种多线程链表操作系统及方法


[0001]本专利技术属于数据管理
,涉及一种链表操作系统及方法,尤其是一种多线程链表操作系统及方法;通过采用本申请的多线程链表操作系统及方法,在提高代码执行效率的同时,减少了同步锁的使用。

技术介绍

[0002]存储控制器主要用于存储端的硬盘及其上存储的数据管理,同时对服务器端提供数据访问服务。在对服务器端提供数据访问的过程中,由于短时间内处理的IO数量巨大,存储控制器中的CPU承担了大量的解包、读盘、写盘操作,在存储领域,一个数据I/O在后端的处理中会经历存储卷、存储池、raid、存储盘等多个操作阶段,每个阶段都会处理大量IO数据,这些IO数据一般通过链表的形式组织起来,这就涉及到多线程对链表的处理。
[0003]在多线程同时处理链表时,为避免并发性问题,一般在链表的数据结构中添加spinlock(自旋锁)或mutex(互斥锁),各线程通过抢锁来争夺对链表的处理权;容易导致线程卡顿,降低代码执行效率。此为现有技术的不足之处。
[0004]有鉴于此,本专利技术提供一种链表操作系统及方法,以解决现有技术中存在的上述技术缺陷,是非常有必要的。

技术实现思路

[0005]本专利技术的目的在于,针对上述现有技术存在的缺陷,提供设计一种链表操作系统及方法,以解决上述技术问题。
[0006]为实现上述目的,本专利技术给出以下技术方案:一种链表操作系统,包括:定义数据结构模块,该模块通过定义数据结构io_data以及该种链表数据结构的list_new列表;多线程访问模块,该模块用于当多个线程需要将新的io_data数据挂载到链表上时,嵌入汇编语言通过对list_new链表中tail变量的原子性互斥操作,完成数据的多线程并发一致性访问;所述的原子性互斥操作包括:运用SMP_LOCK及cmpxchg两条指令级操作,锁住对list_new链表的访问,从而享有独占权(该两条指令首先会取得对tail内存地址的访问权,取得访问权后锁住总线,即针对该内存地址的其他总线访问将被锁住,进而对该内存地址内的值进行修改,完毕后释放总线,其他访问需求再次通过竞争得到获取访问权),规避多线程并发问题,其次在取得独占权的同时完成新io_data new的入表操作,节省时间提高效率。
[0007]作为优选,所述的定义数据结构模块中,定义的数据结构io_data为:typedef struct io_data{struct io_data*next;
intio其他变量}io_data。
[0008]作为优选,所述的定义数据结构模块中,链表数据结构的list_new列表为:Typedefstructlist_new_s{Structio_date*head;Structio_date*tail;Structio_datedummy;}listnew。
[0009]与常规多线程共用链表相比,该链表只在表头指针、表尾指针两个成员变量的基础上添加了一个链表元素成员变量,并不存在为避免并发处理而单独设置的同步锁或互斥锁变量。
[0010]作为优选,所述的原子性互斥操作采用原子操作函数,所述的原子操作函数为:boollist_cmpxchgp(io_date*poniter_i,io_data*old_i,io_date*new_i){Io_data*volatile*result;_asm__volataile_(SMP_LOCK“cmpxchgp%1%2”:”=a”(result):”q”(new_i),”m”(pointer_i),”0”(old_i):”memory”);Returnresult==old_i;}。
[0011]作为优选,原子操作函数原子性(即不可打断)判断pointer指向的值是否与old_i相等,只有在相等的条件下,才将new_i的值赋值给pointer,并返回真,即修改pointer的值的操作顺利完成。
[0012]本专利技术还提供一种链表操作系方法,包括以下步骤:步骤S1:定义数据结构的步骤,该步骤中定义数据结构io_data以及该种链表数据结构的list_new列表;步骤S2:多线程访问的步骤,该步骤中当多个线程需要将新的io_data数据挂载到链表上时,嵌入汇编语言通过对list_new链表中tail变量的原子性互斥操作,完成数据的多线程并发一致性访问;所述步骤S2中的原子性互斥操作包括:运用SMP_LOCK及cmpxchg两条指令级操作,锁住对list_new链表的访问,从而享有独占权(该两条指令首先会取得对tail内存地址的访问权,取得访问权后锁住总线,即针对该内存地址的其他总线访问将被锁住,进而对该内存地址内的值进行修改,完毕后释放总线,其他访问需求再次通过竞争得到获取访问权),规避多线程并发问题,其次在取得独占权的同时完成新io_datanew的入表操作,节省时间提高效率。
[0013]作为优选,所述的步骤S1中,定义的数据结构io_data为:typedefstructio_data{structio_data*next;intio其他变量}io_data。
[0014]作为优选,所述的步骤S1中,链表数据结构的list_new列表为:Typedefstructlist_new_s{Structio_date*head;Structio_date*tail;Structio_datedummy;}listnew。
[0015]与常规多线程共用链表相比,该链表只在表头指针、表尾指针两个成员变量的基础上添加了一个链表元素成员变量,并不存在为避免并发处理而单独设置的同步锁或互斥锁变量。
[0016]作为优选,所述步骤S2中的原子性互斥操作采用原子操作函数,所述的原子操作函数为:boollist_cmpxchgp(io_date*poniter_i,io_data*old_i,io_date*new_i){Io_data*volatile*result;_asm__volataile_(SMP_LOCK“cmpxchgp%1%2”:”=a”(result):”q”(new_i),”m”(pointer_i),”0”(old_i):”memory”);Returnresult==old_i;}。
[0017]作为优选,原子操作函数原子性(即不可打断)判断pointer指向的值是否与old_i相等,只有在相等的条件下,才将new_i的值赋值给pointer,并返回真,即修改pointer的值的操作顺利完成。
[0018]本专利技术的有益效果在于,链表自带元素(dummy)的添加及使用,在链表初始化时就将dummy添加到链表之中,之后在链表中取元素处理时,对取出的元素判断是否为dummy,若是在将其再次入队,如此一来,dummy元素始终存在于链表中,即链表头指针永不为空,则生产者在将新元素加入链表时,无需判断head指针的情况,只需获得tail的独占访问权将其入队即可。通过采用这种多线程链表机制,在提高代码执行效率的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种链表操作系统,其特征在于,包括:定义数据结构模块,该模块通过定义数据结构io_data以及该种链表数据结构的list_new列表;多线程访问模块,该模块用于当多个线程需要将新的io_data数据挂载到链表上时,嵌入汇编语言通过对list_new链表中tail变量的原子性互斥操作,完成数据的多线程并发一致性访问;所述的原子性互斥操作包括:运用SMP_LOCK及cmpxchg两条指令级操作,锁住对list_new链表的访问,从而享有独占权;该两条指令首先会取得对tail内存地址的访问权,取得访问权后锁住总线,即针对该内存地址的其他总线访问将被锁住,进而对该内存地址内的值进行修改,完毕后释放总线,其他访问需求再次通过竞争得到获取访问权。2.根据权利要求1所述的一种链表操作系统,其特征在于,所述的定义数据结构模块中,定义的数据结构io_data为:typedef struct io_data{struct io_data*next;int io其他变量}io_data。3.根据权利要求2所述的一种链表操作系统,其特征在于,所述的定义数据结构模块中,链表数据结构的list_new列表为:Typedef struct list_new_s{Struct io_date *head;Struct io_date *tail;Struct io_date dummy;}list new。4.根据权利要求3所述的一种链表操作系统,其特征在于,所述的原子性互斥操作采用原子操作函数,所述的原子操作函数为:boollist_cmpxchgp(io_date*poniter_i,io_data*old_i,io_date*new_i){Io_data*volatile*result;_asm__volataile_(SMP_LOCK“cmpxchgp %1 %2”:”=a”(result):”q”(new_i),”m”(pointer_i),”0”(old_i):”memory”);Return result==old_i;}。
5.根据权利要求4所述的一种链表操作系统,其特征在于,原子操作函数原子性判断pointer指向的值是否与old_i相等,只有在相等的条件下,才将new_i的值赋值给pointer,并返回真,即修改pointer的值的操作顺利完成。6.一种链表操作系方法,其特...

【专利技术属性】
技术研发人员:吴庆凯孙明刚
申请(专利权)人:苏州浪潮智能科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1