CN110764880B - 一种基于原子操作的三态控制方法 - Google Patents
一种基于原子操作的三态控制方法 Download PDFInfo
- Publication number
- CN110764880B CN110764880B CN201910839552.4A CN201910839552A CN110764880B CN 110764880 B CN110764880 B CN 110764880B CN 201910839552 A CN201910839552 A CN 201910839552A CN 110764880 B CN110764880 B CN 110764880B
- Authority
- CN
- China
- Prior art keywords
- state value
- atomic
- visitor
- controller
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Memory System Of A Hierarchy Structure (AREA)
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 (4)
1.一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态;三个整数的间隔为N,N≠0,即A + N = B,B+ N = C,若N为正数则A < B < C,若N为负数则A > B > C;其特征在于:关联对象由控制者和访问者进行操作,控制者使用原子操作对状态值进行修改,访问者使用原子比较并交换操作对状态值进行判断和修改;控制者和访问者根据原子操作的结果判断是否对关联对象进行操作;控制者使用原子操作将状态值原子化的加N,若加N后状态值为B则对关联对象进行控制操作,若加N后状态值为C则不需要进行任何操作;访问者使用原子比较并交换操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B,若原状态值为B则等待控制操作结束。
2.一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态;三个整数的间隔为N,N≠0,即A + N = B,B+ N = C,若N为正数则A < B < C,若N为负数则A > B > C;其特征在于:关联对象由控制者和访问者进行操作,控制者使用原子操作对状态值进行修改,访问者使用原子比较并交换操作对状态值进行判断和修改;控制者和访问者根据原子操作的结果判断是否对关联对象进行操作;控制者使用原子操作将状态值原子化的加N,若加N后状态值为C则对关联对象进行控制操作,若加N后状态值为B则不需要进行任何操作;访问者使用原子比较并交换操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B并等待控制者对关联对象进行控制操作。
3.一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态;三个整数的间隔为N,N≠0,即A + N = B,B+ N = C,若N为正数则A < B < C,若N为负数则A > B > C;其特征在于:关联对象由控制者和访问者进行操作,控制者使用原子操作对状态值进行修改,访问者使用原子比较并交换操作对状态值进行判断和修改;控制者和访问者根据原子操作的结果判断是否对关联对象进行操作;访问者使用原子比较并交换操作判断状态值是否为A,若原状态值为A则将其原子化的替换为B并访问关联对象;控制者使用原子操作将状态值原子化的加N,若加N后状态值为C则等待访问者完成对关联对象的访问,若加N后状态值为B则不需要等待。
4.一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态;三个整数的间隔为N,N≠0,即A + N = B,B+ N = C,若N为正数则A < B < C,若N为负数则A > B > C;其特征在于:关联对象由控制者和访问者进行操作,控制者使用原子操作对状态值进行修改,访问者使用原子比较并交换操作对状态值进行判断和修改;控制者和访问者根据原子操作的结果判断是否对关联对象进行操作;访问者使用原子比较并交换操作判断状态值是否为B,若原状态值为B则将其原子化的替换为C并访问关联对象;控制者使用原子操作将状态值原子化的减N,若减N后状态值为B则等待访问者完成对关联对象的访问,若减N后状态值为A则不需要等待。
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 CN110764880A (zh) | 2020-02-07 |
CN110764880B true 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 (2)
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 |
CN101763289A (zh) * | 2009-09-25 | 2010-06-30 | 中国人民解放军国防科学技术大学 | 一种基于共享内存的消息传递方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7380073B2 (en) * | 2003-11-26 | 2008-05-27 | Sas Institute Inc. | Computer-implemented system and method for lock handling |
CN102662747A (zh) * | 2012-04-23 | 2012-09-12 | 深圳市融创天下科技股份有限公司 | 一种线程访问临界区的方法、***和终端设备 |
US10067960B2 (en) * | 2015-06-04 | 2018-09-04 | Microsoft Technology Licensing, Llc | Controlling atomic updates of indexes using hardware transactional memory |
WO2017056172A1 (ja) * | 2015-09-29 | 2017-04-06 | 株式会社日立製作所 | メモリ領域の排他制御を実行する計算機システム |
US10248471B2 (en) * | 2016-09-15 | 2019-04-02 | 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 | 百度在线网络技术(北京)有限公司 | 临界区加锁方法、装置、终端及存储介质 |
CN109375990B (zh) * | 2018-09-29 | 2021-07-20 | 长沙新弘软件有限公司 | 一种基于原子操作的环形链表方法 |
-
2019
- 2019-09-06 CN CN201910839552.4A patent/CN110764880B/zh active Active
Patent Citations (2)
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 |
CN101763289A (zh) * | 2009-09-25 | 2010-06-30 | 中国人民解放军国防科学技术大学 | 一种基于共享内存的消息传递方法 |
Non-Patent Citations (1)
Title |
---|
基于硬件CAS原语的高效多字无锁同步算法;吴昊;季振洲;朱素霞;;电子学报(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110764880A (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7966459B2 (en) | System and method for supporting phased transactional memory modes | |
US8239871B2 (en) | Managing timeout in a multithreaded system by instantiating a timer object having scheduled expiration time and set of timeout handling information | |
US5742785A (en) | Posting multiple reservations with a conditional store atomic operations in a multiprocessing environment | |
US8055860B2 (en) | Read-copy-update (RCU) operations with reduced memory barrier usage | |
US5253344A (en) | Method and apparatus for dynamically changing the configuration of a logically partitioned data processing system | |
US7506339B2 (en) | High performance synchronization of accesses by threads to shared resources | |
US6754859B2 (en) | Computer processor read/alter/rewrite optimization cache invalidate signals | |
CN110597640A (zh) | 进程间的数据传输方法、装置、终端及计算机存储介质 | |
US20060130061A1 (en) | Use of rollback RCU with read-side modifications to RCU-protected data structures | |
US5499356A (en) | Method and apparatus for a multiprocessor resource lockout instruction | |
US20090249356A1 (en) | Lock-free circular queue in a multiprocessing system | |
US7861093B2 (en) | Managing data access via a loop only if changed locking facility | |
JPS5983249A (ja) | 待ち行列制御方法 | |
Jayanti | Adaptive and efficient abortable mutual exclusion | |
US20070186069A1 (en) | Coordinating Synchronization Mechanisms using Transactional Memory | |
US20040117793A1 (en) | Operating system architecture employing synchronous tasks | |
US20150254113A1 (en) | Lock Spin Wait Operation for Multi-Threaded Applications in a Multi-Core Computing Environment | |
US7793023B2 (en) | Exclusion control | |
US20090198920A1 (en) | Processing Units Within a Multiprocessor System Adapted to Support Memory Locks | |
US6886165B1 (en) | Method for the direct call of a function by a software module by means of a processor with a memory-management unit (MMU) | |
CN110764880B (zh) | 一种基于原子操作的三态控制方法 | |
US20090307442A1 (en) | Memory Access Control | |
US9354890B1 (en) | Call stack structure for enabling execution of code outside of a subroutine and between call stack frames | |
EP4068094A1 (en) | Lock-free ring buffer | |
US8286166B2 (en) | Interruptible thread synchronization method and apparatus |
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 |