APP下载

基于下推自动机的细粒度锁自动重构方法*

2021-02-25张冬雯

软件学报 2021年12期
关键词:程序方法

张 杨,邵 帅,张冬雯

(河北科技大学 信息科学与工程学院,河北 石家庄 050018)

锁是并发程序中用于保护程序状态和数据访问正确性的必备措施,然而锁竞争问题是目前多核/众核时代影响并发程序性能的主要问题之一.锁竞争是指当临界区被一个互斥锁保护时,如果一个线程获得了该锁,那么其他请求访问该临界区的线程都将被阻塞,直到持有该锁的线程释放该锁.锁竞争问题的存在,会严重降低程序并行度,损害程序的可伸缩性,降低多核/众核处理器的执行效率.

不恰当的并发控制方式通常会进一步加剧锁竞争,程序开发人员有时习惯于使用粗粒度锁,例如在方法的修饰符中加入synchronized 关键字,使整个方法处于锁的保护之中.这种加锁方式虽然可以降低程序开发的复杂性,然而由于粗粒度锁控制的临界区代码较长,导致其他想获取该锁的线程等待时间增加,往往会加剧锁竞争.许多开发人员尝试使用细粒度锁,相比于粗粒度锁,细粒度锁只对一小部分代码进行加锁,可以有效减少锁的持有时间和线程等待时间,减少锁竞争问题的影响.

与粗粒度锁比较,使用细粒度锁并非一件容易的事.要想实现细粒度的加锁方式,通常可以采用升级锁、降级锁、优化读锁等加锁方式,也可以采用将粗粒度读写锁分解为细粒度读写锁的方式.程序开发人员不仅需要对代码模式进行分析以确定使用何种细粒度锁的加锁方式,而且……

登录APP查看全文

猜你喜欢

程序方法
学习方法
试论我国未决羁押程序的立法完善
失能的信仰——走向衰亡的民事诉讼程序
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
用对方法才能瘦
创卫暗访程序有待改进
四大方法 教你不再“坐以待病”!
赚钱方法
捕鱼