[发明专利]基于数据隔离避免线程冲突的方法有效
申请号: | 201310608202.X | 申请日: | 2013-11-27 |
公开(公告)号: | CN103617025B | 公开(公告)日: | 2017-03-08 |
发明(设计)人: | 周文俊;丛春涛;刘国华;杨冰;孙发恩;贺强;孟庆媛;朱晓磊;宋先慧;袁文广 | 申请(专利权)人: | 积成电子股份有限公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38;G06F9/40 |
代理公司: | 济南舜源专利事务所有限公司37205 | 代理人: | 刘玉玲 |
地址: | 250100 山东省*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 数据 隔离 避免 线程 冲突 方法 | ||
技术领域
本发明涉及多线程应用技术领域,具体涉及一种不破坏并发性能的基于数据隔离避免线程冲突的方法。
背景技术
随着计算机技术的发展,硬件的性能得到了巨大的提高,使得多线程的应用越来越广泛。使用多线程可以使得多个执行路径并行执行,降低了程序开发的复杂度,提高了软件的性能,尤其是在多处理器系统上,多线程的软件程序可以充分利用处理器资源,获得更好的性能。
随之而来的一个问题是,有时,某个功能在被多次使用时,需要记住上次调用的状态,例如某个累加结果等,这样就需要一个或一组静态数据来存储该状态。所谓的“静态数据”,是指在运行过程中一直存在的状态数据,在编程语言中一般体现为全局变量(对象)或静态变量(对象)。设想该功能在多个线程中被使用的情况,并行的功能访问静态的数据,彼此随时都会被对方打断,如果恰巧都在访问静态数据(例如都在写入),就会使该静态数据进入不一致的状态,导致错误的运行结果。如果某个功能具有这种特性,就称该功能为非线程安全的。而没有使用静态数据而仅使用局部变量的功能,在多线程中被执行时就不会造成错误状态,就被称为线程安全的。
解决上述问题目前通常使用的方法是为功能所依赖的静态数据提供一个配套的锁,当准备对数据进行读写操作前,就对锁执行加锁操作,此时如果锁已经处于被加锁状态,该线程就进入等待状态,直到锁被解锁才继续执行;当结束一组操作后,再把锁解锁。这样就可以保证静态的状态数据不会处于不一致的状态。这样,这一功能在不同线程被调用时,就不会造成错误,此时称该功能为线程安全的。
然而,通过加锁实现的线程安全是以两个线程彼此等待为代价的,这样就破坏了线程的并行特性,降低了程序的执行性能。在极端的情况下,如果两个或者多个线程一直需要使用某个共享资源,就会退化为串行的状态,完全失去了多线程处理的意义,反而还会因为操作系统线程调度的开销而得到低于单线程程序的性能。
此外,由于不同的操作系统提供的加锁和解锁操作各有不同,使得对数据的加锁和解锁要考虑不同操作系统的差异而采取不同的实现,又给实现程序的跨平台特性带来了一定的困难。
发明内容
为解决上述问题,本发明提供了一种基于数据隔离避免线程冲突的方法,可在保证线程安全的同时提高线程的并发性。
本发明的应用范围是在多线程中被并发调用且需要存储状态的功能,可以解决其线程冲突的问题。本发明使用的技术手段是数据隔离,数据隔离的方法是将功能引用的静态数据按可能使用该数据的线程数量分解为数据集合,并将数据集合中的数据副本分别分配给调用此功能的各个线程使用。
本发明采用的技术方案如下:
一种基于数据隔离避免线程冲突的方法,包括如下步骤:
(1)确定无需共享的静态数据集合:判断执行进程中各功能对应的静态数据是否需在各线程间共享,选定无需共享的静态数据集合;对于需要在各个线程间共享的数据,不适合使用数据隔离的方法,这类数据使用原始的加锁操作。
(2)创建数据副本:根据调用某功能的线程数,为该功能所使用的非共享静态数据创建相应数量的数据副本;
(3)分配数据副本:在线程与数据副本间建立对应关系;
(4)读写操作:各线程根据对应关系调用相应数据副本进行读写操作。
具体的,根据调用该功能的线程数能否预先确定,步骤(2)分以下两种方式操作:
①线程数能预先确定,静态创建数据副本:将该功能对应的静态数据改为数组,数组成员数为调用此功能的线程数,数组成员为各个数据副本;
②线程数不能预先确定,动态创建数据副本:将该功能对应的静态数据改为数据映射表,其key类型为线程ID,value类型为静态数据的数据类型。数据映射表作为存储数据副本及线程与数据副本映射关系的容器,在开始时并不包含数据副本,当线程使用此静态数据时,动态创建一个数据副本,并存入线程与该数据副本的映射关系。下次使用如果还是该线程,则能从映射表中找到其数据副本,直接调用,如果不是该线程,则再动态创建数据副本并生成映射关系。
具体的,根据线程数能否预先确定以及上述数据副本创建方式,步骤(3)选择相应方式分配数据副本:
①静态分配数据副本:为该功能函数增加一个参数,静态数据和调用该功能的线程函数也增加该参数,根据参数值给某一线程分配对应的数据副本;该参数表示其对应的数据副本在数组中的索引,根据参数完成线程与相应数据副本的对应。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于积成电子股份有限公司,未经积成电子股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310608202.X/2.html,转载请声明来源钻瓜专利网。
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置