CN110764880A - 一种基于原子操作的三态控制方法 - Google Patents

一种基于原子操作的三态控制方法 Download PDF

Info

Publication number
CN110764880A
CN110764880A CN201910839552.4A CN201910839552A CN110764880A CN 110764880 A CN110764880 A CN 110764880A CN 201910839552 A CN201910839552 A CN 201910839552A CN 110764880 A CN110764880 A CN 110764880A
Authority
CN
China
Prior art keywords
state value
controller
atomic
visitor
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201910839552.4A
Other languages
English (en)
Other versions
CN110764880B (zh
Inventor
龙恢
管志坚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Changsha Xin Hong Softcom Ltd
Original Assignee
Changsha Xin Hong Softcom Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Changsha Xin Hong Softcom Ltd filed Critical Changsha Xin Hong Softcom Ltd
Priority to CN201910839552.4A priority Critical patent/CN110764880B/zh
Publication of CN110764880A publication Critical patent/CN110764880A/zh
Application granted granted Critical
Publication of CN110764880B publication Critical patent/CN110764880B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/02Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]

Abstract

一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态;三个整数的间隔为N,N≠0,即A+N=B,B+N=C;关联对象由控制者和访问者进行操作,控制者使用原子加N操作或原子减N操作对状态值进行修改,访问者使用原子比较并交换CAS操作对状态值进行判断和修改;控制者和访问者根据原子操作的结果判断是否对关联对象进行操作。

Description

一种基于原子操作的三态控制方法
技术领域
本发明涉及计算机系统软件编程领域,特别是一种基于原子操作的三态控制方法。
背景技术
在计算机系统软件中对设备和对象的状态控制,通常是软件设置状态值来体现和判断该设备或对象的工作状态,例如设备的使能和禁用,由于状态值一般是个普通的整数变量,需要锁机制来保证对其访问和修改的有效性。任何锁机制都只有两种状态,即锁定和非锁定两种状态,需要先确定锁为非锁定状态然后将其变更为锁定状态才能去修改状态值。因此状态值的修改需要经过两个过程,且在任意时间锁不一定就处于非锁定状态,可能另外一个线程正在访问导致当前线程需要等待一段时间才能变更锁的状态。而乐观锁和普通锁本质上并没有区别,唯一的区别是乐观锁是由编程者决定以什么方式等待,普通锁机制默认使当前线程挂起或使处理器轮询锁状态的方式进行等待。对于访问不频繁的设备来说,这种机制是简单而有效的,但对于像频繁调度的处理器或频繁写入显示信息的显示屏对象,控制线程和访问线程都有可能等待锁的状态被阻塞而导致性能上的瓶颈。
发明内容
本发明的目的是克服现有技术的上述不足而提供一种基于原子操作的三态控制方法。
本发明的技术方案是:一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态。三个整数的间隔为N,N ≠ 0,即A + N = B,B + N = C,若N为正数则A < B < C,若N为负数则A > B > C。关联对象由控制者和访问者进行操作,控制者使用原子加N操作或原子减N操作对状态值进行修改,访问者使用原子比较并交换(CAS)操作对状态值进行判断和修改。控制者和访问者根据原子操作的结果判断是否对关联对象进行操作。控制者对关联对象进行控制操作,例如发送命令、发送消息和发送事件等。访问者对关联对象进行访问操作,例如数据读写和处理请求等。
模式一:控制者进行操作而访问者只判断状态,控制者使用原子操作将状态值原子化的加N,若加N后状态值为B则对关联对象进行控制操作,若加N后状态值为C则不需要进行任何操作。访问者使用原子比较并交换(CAS)操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B,若原状态值为B则阻塞访问者线程等待控制操作结束。
模式二:控制者进行操作而访问者只判断状态,控制者使用原子操作将状态值原子化的加N,若加N后状态值为C则对关联对象进行控制操作,若加N后状态值为B则不需要进行任何操作。访问者使用原子比较并交换(CAS)操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B并阻塞访问者线程等待控制者对关联对象进行控制操作。
模式三:访问者进行操作而控制者只判断状态,访问者使用原子比较并交换(CAS)操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B并访问关联对象。控制者使用原子操作将状态值原子化的加N,若加N后状态值为C则阻塞控制者线程等待访问者完成对关联对象的访问,若加N后状态值为B则不需要等待。
模式四:访问者进行操作而控制者只判断状态,访问者使用原子比较并交换(CAS)操作判断状态值是否为B,若原状态值为B则将其原子化的替换为C并访问关联对象。控制者使用原子操作将状态值原子化的减N,若减N后状态值为B则阻塞控制者线程等待访问者完成对关联对象的访问,若减N后状态值为A则不需要等待。
本发明与现有技术相比具有如下特点:发明阐述一种使用原子操作实现三态控制的方法,通过控制者和访问者使用原子操作对状态值进行修改并根据结果实现控制者和访问者之间对关联对象操作的约束。不同于一般锁机制保证状态值修改正确性的方式,该方法不需要先确定锁的状态,因锁的状态是不确定的将导致任何线程都有可能被阻塞。而该方法直接根据原子操作的结果来确定一个线程是访问还是不访问,另一个线程是等待还是不等待,不存在锁的不确定性。相较于一般使用锁机制导致两者都有可能被阻塞的实现,该方法更适合于频繁访问的设备或对象。
以下结合附图和具体实施方式对本发明的详细结构作进一步描述。
附图说明
附图1为模式一控制者进行操作而访问者只判断状态的示例图;
附图2为模式二控制者进行操作而访问者只判断状态的示例图;
附图3为模式三访问者进行操作而控制者只判断状态的示例图;
附图4为模式四访问者进行操作而控制者只判断状态的示例图。
具体实施方式
如附图1所示:示例中A = 0,B = 1,C = 2,分别表示初始态、中间态和完成态,例如在调度处理器时分别代表未调度、已发送调度中断命令和已完成调度中断;步骤101为控制者线程使用原子加1操作对状态值进行修改,若加1后状态值为1则执行步骤102对关联对象进行控制操作,例如发送中断命令,若加1后状态值为2则执行步骤103不进行操作;步骤104为访问者线程使用原子比较并交换(CAS)操作判断状态值是否为0,原状态值为0则原子化的替换为1,原状态值为1则执行步骤105等待控制操作完成;在调度处理器场景中完成调度后由访问者线程将状态值恢复为0。
如附图2所示:示例中A = 0,B = 1,C = 2,分别表示初始态、中间态和完成态,例如在接收键盘输入时分别代表未输入、等待输入和完成输入;步骤201为控制者线程使用原子加1操作对状态值进行修改,若加1后状态值为1则执行步骤202不进行操作,若加1后状态值为2则执行步骤203对关联对象进行控制操作,例如提交按键事件;步骤204为访问者线程使用原子比较并交换(CAS)操作判断状态值是否为0,原状态值为0则原子化的替换为1并执行步骤205等待控制者对关联对象进行控制操作;在接收键盘输入场景中由控制者线程将状态值恢复为0,或访问者线程不需要等待时将状态值恢复为0。
如附图3所示:示例中A = 0,B = 1,C = 2,分别表示初始态、运行态和停止态,例如在屏幕显示缓存更新时代表可更新、需要更新和不可更新;步骤301为控制者线程使用原子加1操作对状态值进行修改,若加1后状态值为1则执行步骤302不等待,若加1后状态值为2则执行步骤303等待访问操作完成;步骤304为访问者线程使用原子比较并交换(CAS)操作判断状态值是否为0,原状态值为0则原子化的替换为1并执行步骤305对关联对象进行访问操作,例如写屏幕缓存数据;在屏幕显示缓存更新场景中由访问者线程将状态值恢复为0。
如附图4所示:示例中A = 0,B = 1,C = 2,分别表示停止态、初始态和运行态,例如在磁盘设备读写时代表设备已卸载、设备可用和正在读写;步骤401为控制者线程使用原子减1操作对状态值进行修改,若减1后状态值为1则执行步骤402等待访问操作完成,若加1后状态值为0则执行步骤403不等待;步骤404为访问者线程使用原子比较并交换(CAS)操作判断状态值是否为1,原状态值为1则原子化的替换为2并执行步骤405对关联对象进行访问操作,例如读写磁盘;在磁盘设备读写场景中完成读写后由访问者线程将状态值恢复为1,若磁盘被控制者线程卸载后将不再恢复。
本发明涉及到计算机专业领域里原子操作的概念,对于本专业领域的技术人员,能够熟练的在不同处理器平台上使用该平台的相关机器指令实现这些原子操作。例如本发明中使用的原子比较并交换(CAS)操作在Intel x86处理器平台上可以用LOCK CMPXCHG指令实现。原子加和原子减在Intel x86处理器平台上可以用LOCK ADD、LOCK SUB、LOCK INC、LOCK DEC和LOCK XADD指令实现,其中加法指令可以用减法指令和补码替代,同样减法指令也可以用加法指令和补码替代。原子加减操作也可用LOCK CMPXCHG指令和普通加减指令加条件循环来替代,且不同的处理器硬件平台实现这些原子操作的机器指令是不同的,不能将这种差异解释为超出本发明的范畴。
名词解释
锁机制:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。
独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。
CAS 操作
上面的乐观锁用到的机制就是CAS,Compare and Swap。
CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
原子操作:是处理器访问内存变量过程中为读、修改、写提供完整性保证的一系列运算操作的统称,是由处理器硬件实现的,例如原子加原子减和原子比较并交换操作。在多处理器系统中当两个处理器同时修改同一个变量时,原子操作可以保证只有在一个处理器完成对变量的修改后另一个处理器才能对变量进行修改,任何锁机制都是基于原子操作实现的。
控制者和访问者:控制者是对关联对象进行控制操作的线程。访问者是对关联对象进行访问操作的线程。
控制操作:发送命令、发送消息和发送事件等向关联对象提交控制的操作。
访问操作:数据读写和处理请求等处理关联对象中数据的操作。

Claims (5)

1.一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态;三个整数的间隔为N,N≠0,即A + N = B,B+ N = C,若N为正数则A < B < C,若N为负数则A > B > C;其特征在于:关联对象由控制者和访问者进行操作,控制者使用原子加N操作或原子减N操作对状态值进行修改,访问者使用原子比较并交换操作对状态值进行判断和修改;控制者和访问者根据原子操作的结果判断是否对关联对象进行操作。
2.根据权利要求1所述的一种基于原子操作的三态控制方法,其特征是:控制者使用原子操作将状态值原子化的加N,若加N后状态值为B则对关联对象进行控制操作,若加N后状态值为C则不需要进行任何操作;访问者使用原子比较并交换操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B,若原状态值为B则等待控制操作结束。
3.根据权利要求1所述的一种基于原子操作的三态控制方法,其特征是:控制者使用原子操作将状态值原子化的加N,若加N后状态值为C则对关联对象进行控制操作,若加N后状态值为B则不需要进行任何操作;访问者使用原子比较并交换操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B并等待控制者对关联对象进行控制操作。
4.根据权利要求1所述的一种基于原子操作的三态控制方法,其特征是:访问者使用原子比较并交换操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B并访问关联对象;控制者使用原子操作将状态值原子化的加N,若加N后状态值为C则等待访问者完成对关联对象的访问,若加N后状态值为B则不需要等待。
5.根据权利要求1所述的一种基于原子操作的三态控制方法,其特征是:访问者使用原子比较并交换操作判断状态值是否为B,若原状态值为B则将其原子化的替换为C并访问关联对象;控制者使用原子操作将状态值原子化的减N,若减N后状态值为B则等待访问者完成对关联对象的访问,若减N后状态值为A则不需要等待。
CN201910839552.4A 2019-09-06 2019-09-06 一种基于原子操作的三态控制方法 Active CN110764880B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910839552.4A CN110764880B (zh) 2019-09-06 2019-09-06 一种基于原子操作的三态控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910839552.4A CN110764880B (zh) 2019-09-06 2019-09-06 一种基于原子操作的三态控制方法

Publications (2)

Publication Number Publication Date
CN110764880A true CN110764880A (zh) 2020-02-07
CN110764880B CN110764880B (zh) 2023-06-16

Family

ID=69330062

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910839552.4A Active CN110764880B (zh) 2019-09-06 2019-09-06 一种基于原子操作的三态控制方法

Country Status (1)

Country Link
CN (1) CN110764880B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6247025B1 (en) * 1997-07-17 2001-06-12 International Business Machines Corporation Locking and unlocking mechanism for controlling concurrent access to objects
US20050114609A1 (en) * 2003-11-26 2005-05-26 Shorb Charles S. Computer-implemented system and method for lock handling
CN101763289A (zh) * 2009-09-25 2010-06-30 中国人民解放军国防科学技术大学 一种基于共享内存的消息传递方法
CN102662747A (zh) * 2012-04-23 2012-09-12 深圳市融创天下科技股份有限公司 一种线程访问临界区的方法、系统和终端设备
US20160357791A1 (en) * 2015-06-04 2016-12-08 Microsoft Technology Licensing, Llc Controlling atomic updates of indexes using hardware transactional memory
WO2017056172A1 (ja) * 2015-09-29 2017-04-06 株式会社日立製作所 メモリ領域の排他制御を実行する計算機システム
US20180074865A1 (en) * 2016-09-15 2018-03-15 Oracle International Corporation Lockless execution in read-mostly workloads for efficient concurrent process execution on shared resources
CN109271260A (zh) * 2018-08-28 2019-01-25 百度在线网络技术(北京)有限公司 临界区加锁方法、装置、终端及存储介质
CN109375990A (zh) * 2018-09-29 2019-02-22 长沙新弘软件有限公司 一种基于原子操作的环形链表方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6247025B1 (en) * 1997-07-17 2001-06-12 International Business Machines Corporation Locking and unlocking mechanism for controlling concurrent access to objects
US20050114609A1 (en) * 2003-11-26 2005-05-26 Shorb Charles S. Computer-implemented system and method for lock handling
CN101763289A (zh) * 2009-09-25 2010-06-30 中国人民解放军国防科学技术大学 一种基于共享内存的消息传递方法
CN102662747A (zh) * 2012-04-23 2012-09-12 深圳市融创天下科技股份有限公司 一种线程访问临界区的方法、系统和终端设备
US20160357791A1 (en) * 2015-06-04 2016-12-08 Microsoft Technology Licensing, Llc Controlling atomic updates of indexes using hardware transactional memory
CN107667364A (zh) * 2015-06-04 2018-02-06 微软技术许可有限责任公司 使用硬件事务存储器控制索引的原子更新
WO2017056172A1 (ja) * 2015-09-29 2017-04-06 株式会社日立製作所 メモリ領域の排他制御を実行する計算機システム
US20180074865A1 (en) * 2016-09-15 2018-03-15 Oracle International Corporation Lockless execution in read-mostly workloads for efficient concurrent process execution on shared resources
CN109271260A (zh) * 2018-08-28 2019-01-25 百度在线网络技术(北京)有限公司 临界区加锁方法、装置、终端及存储介质
CN109375990A (zh) * 2018-09-29 2019-02-22 长沙新弘软件有限公司 一种基于原子操作的环形链表方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
吴昊;季振洲;朱素霞;: "基于硬件CAS原语的高效多字无锁同步算法", 电子学报, no. 11 *
潘圆圆;李德华;: "C++中的原子操作及其使用", no. 11 *

Also Published As

Publication number Publication date
CN110764880B (zh) 2023-06-16

Similar Documents

Publication Publication Date Title
US7966459B2 (en) System and method for supporting phased transactional memory modes
US7818306B2 (en) Read-copy-update (RCU) operations with reduced memory barrier usage
US7353346B2 (en) Read-copy-update (RCU) operations with reduced memory barrier usage
US8239871B2 (en) Managing timeout in a multithreaded system by instantiating a timer object having scheduled expiration time and set of timeout handling information
US9798595B2 (en) Transparent user mode scheduling on traditional threading systems
JP2500101B2 (ja) 共用変数の値を更新する方法
US8140497B2 (en) System and method for implementing nonblocking zero-indirection transactional memory
US8539465B2 (en) Accelerating unbounded memory transactions using nested cache resident transactions
US9378069B2 (en) Lock spin wait operation for multi-threaded applications in a multi-core computing environment
US20070157200A1 (en) System and method for generating a lock-free dual queue
US20090249356A1 (en) Lock-free circular queue in a multiprocessing system
US20040111656A1 (en) Computer processor read/alter/rewrite optimization cache invalidate signals
US9201691B2 (en) Method, apparatus and system for coordinating execution of tasks in a computing system having a distributed shared memory
CA2706737A1 (en) A multi-reader, multi-writer lock-free ring buffer
US8321874B2 (en) Intelligent context migration for user mode scheduling
EP2284703A2 (en) Scheduling of tasks in a parallel computer system according to defined policies
US20100131720A1 (en) Management of ownership control and data movement in shared-memory systems
US20040117793A1 (en) Operating system architecture employing synchronous tasks
WO2011096163A1 (ja) 情報処理システム、排他制御方法および排他制御用プログラム
US7793023B2 (en) Exclusion control
US8869172B2 (en) Method and system method and system for exception-less system calls for event driven programs
CN116701010A (zh) 一种多线程共享变量的更新方法、系统、装置及介质
US8219762B1 (en) Computer system and method for leasing memory location to allow predictable access to memory location
US20030014558A1 (en) Batch interrupts handling device, virtual shared memory and multiple concurrent processing device
CN110764880B (zh) 一种基于原子操作的三态控制方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant