博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
锁优化
阅读量:3925 次
发布时间:2019-05-23

本文共 459 字,大约阅读时间需要 1 分钟。

在这里插入图片描述

在这里插入图片描述

锁的优化策略

编码过程中可采取的锁优化的思路有以下几种:

1、减少锁持有时间

例如:对一个方法加锁,不如对方法中需要同步的几行代码加锁;

2、减小锁粒度

例如:ConcurrentHashMap采取对segment加锁而不是整个map加锁,后来又对node加锁,提高并发性;

3、锁分离

根据同步操作的性质,把锁划分为的读锁和写锁,读锁之间不互斥,提高了并发性。

4、锁粗化

这看起来与思路1有冲突,其实不然。思路1是针对一个线程中只有个别地方需要同步,所以把锁加在同步的语句上而不是更大的范围,减少线程持有锁的时间;

而锁粗化是指:在一个间隔性地需要执行同步语句的线程中,如果在不连续的同步块间频繁加锁解锁是很耗性能的,因此把加锁范围扩大,把这些不连续的同步语句进行一次性加锁解锁。虽然线程持有锁的时间增加了,但是总体来说是优化了的。

5、锁消除

锁消除是编译器做的事:根据代码逃逸技术,如果判断到一段代码中,堆上的数据不会逃逸出当前线程(即不会影响线程空间外的数据),那么可以认为这段代码是线程安全的,不必要加锁。

转载地址:http://nwugn.baihongyu.com/

你可能感兴趣的文章
poj 1738 An old Stone Game(此题数小则可用区间DP,数较大用一维数组或者GarsiaWachs算法),待续
查看>>
poj 1823 Hotel(线段树,整段更新)
查看>>
poj 3667 Hotel(此题跟poj 1823有共同点,都属于区间合并问题)
查看>>
hdu 1754 I Hate It(线段树,单点替换,求区间最值)
查看>>
poj 2828 Buy Tickets(线段树中单点更新较难的题目)
查看>>
codeforces比赛题A. Nineteen,BThree matrices
查看>>
poj 2886 Who Gets the Most Candies?(线段树单点更新+反素数)真难。。。
查看>>
poj 3468 A Simple Problem with Integers(线段树成段更新,懒惰标记的使用)经典题目
查看>>
关于线段树懒惰标记的理解,成段更新(poj 3468为例)
查看>>
poj 2528 Mayor's posters(线段树区间更新+离散化)经典题目,较难。。。
查看>>
codeforces 394A Counting Sticks(题目虽简单,但是考虑的情况多,需仔细)
查看>>
codeforces 394 B. Very Beautiful Number(思路较难,优化的地方多)好题。。。
查看>>
poj 3225 Help with Intervals(线段树+区间的交集,差集,补集,并集)好难的题目,一天了,真是纠结
查看>>
poj 1664 放苹果(递推,记忆化搜索)简单题
查看>>
poj 1436 Horizontally Visible Segments(线段树成段覆盖问题+简单hash),好题,覆盖问题想法较难
查看>>
hdu 3308 LCIS(线段树单点更新+区间合并)中等难度的题目
查看>>
poj 3042 Grazing on the Run(区间DP,三维DP)
查看>>
poj 1991 Turning in Homework(区间DP,大区间推出小区间的思想)好题,想法很独特
查看>>
codeforces 395 B1. iwiwi(待续)
查看>>
hdu 4283 You Are the One(区间DP)题目转换难,状态难,。。。
查看>>