一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态;三个整数的间隔为N,N≠0,即A+N=B,B+N=C;关联对象由控制者和访问者进行操作,控制者使用原子加N操作或原子减N操作对状态值进行修改,访问者使用原子比较并交换CAS操作对状态值进行判断和修改;控制者和访问者根据原子操作的结果判断是否对关联对象进行操作。
A three state control method based on atomic operation
【技术实现步骤摘要】
一种基于原子操作的三态控制方法
本专利技术涉及计算机系统软件编程领域,特别是一种基于原子操作的三态控制方法。
技术介绍
在计算机系统软件中对设备和对象的状态控制,通常是软件设置状态值来体现和判断该设备或对象的工作状态,例如设备的使能和禁用,由于状态值一般是个普通的整数变量,需要锁机制来保证对其访问和修改的有效性。任何锁机制都只有两种状态,即锁定和非锁定两种状态,需要先确定锁为非锁定状态然后将其变更为锁定状态才能去修改状态值。因此状态值的修改需要经过两个过程,且在任意时间锁不一定就处于非锁定状态,可能另外一个线程正在访问导致当前线程需要等待一段时间才能变更锁的状态。而乐观锁和普通锁本质上并没有区别,唯一的区别是乐观锁是由编程者决定以什么方式等待,普通锁机制默认使当前线程挂起或使处理器轮询锁状态的方式进行等待。对于访问不频繁的设备来说,这种机制是简单而有效的,但对于像频繁调度的处理器或频繁写入显示信息的显示屏对象,控制线程和访问线程都有可能等待锁的状态被阻塞而导致性能上的瓶颈。
技术实现思路
本专利技术的目的是克服现有技术的上述不足而提供一种基于原子操作的三态控制方法。本专利技术的技术方案是:一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数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,若磁盘被控制者线程卸载后将不再恢复。本专利技术涉及到计算机专业领域里原子操作的概念,对于本专业领域的技术人员,能够熟练的在不同本文档来自技高网...
【技术保护点】
1.一种基于原子操作的三态控制方法,该方法包括一个整数状态值和一个与之关联的对象,由三个等差的整数A、B、C来表示三种状态;三个整数的间隔为N,N≠0,即A + N = B,B+ N = C,若N为正数则A < B < C,若N为负数则A > B > C;其特征在于:关联对象由控制者和访问者进行操作,控制者使用原子加N操作或原子减N操作对状态值进行修改,访问者使用原子比较并交换操作对状态值进行判断和修改;控制者和访问者根据原子操作的结果判断是否对关联对象进行操作。/n
【技术特征摘要】
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所述的一种基于原子操作的三态控制方法,其...
【专利技术属性】
技术研发人员:龙恢,管志坚,
申请(专利权)人:长沙新弘软件有限公司,
类型:发明
国别省市:湖南;43
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。