Java高并发程序-Chapter5 锁的优化及注意事项(第三十二讲)无锁
2018-04-02 10:19
483 查看
1. 无锁类原理详解
CAS:CAS算法的过程是这样:它包含3个参数CAS(V,E,N)。V表示要更新的变量,E表示预期值,N表示新值。仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。最后,CAS返回当前V的真实值。CAS操作是抱着乐观的态度进行的,它总是认为自己可以成功完成操作。当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其余均会失败。失败的线程不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。基于这样的原理,CAS操作即时没有锁,也可以发现其他线程对当前线程的干扰,并进行恰当的处理。
CPU指令:cmpxchg
/*
accumulator = AL, AX, or EAX, depending on whether
a byte, word, or doubleword comparison is being performed
*/
if(accumulator == Destination) {
ZF = 1;
Destination = Source;
}
else {
ZF = 0;
accumulator = Destination;
}
相关文章推荐
- Java高并发程序-Chapter5 锁的优化及注意事项(第三十讲)虚拟机内的锁优化
- Java高并发程序-Chapter5 锁的优化及注意事项(第三十三讲)无锁 - 无锁类的使用
- Java高并发程序-Chapter5 锁的优化及注意事项(第二十九讲)锁优化思路和建议
- Java高并发程序-Chapter5 锁的优化及注意事项(第三十一讲)ThreadLocal
- Java高并发程序-Chapter5 锁的优化及注意事项(第三十四讲)无锁 - LockFreeVector
- java高并发程序设计学习笔记九锁的优化和注意事项
- Java高并发程序设计笔记10之锁的优化和注意事项
- 高并发Java 九 锁的优化和注意事项
- Java 高并发九:锁的优化和注意事项详解
- 高并发Java 九 锁的优化和注意事项
- Java 并发注意事项
- DOC编译和运行java程序注意事项
- 编写跨平台Java程序注意事项
- 编写跨平台Java程序注意事项
- 编写跨平台Java程序注意事项
- Java并发编程注意事项
- java学习一:java写程序的一些基本的注意事项
- java第一个程序helloworld的实现及其注意事项
- Java基础4:程序结构以及注意事项
- 实现Java程序跨平台运行十二个注意事项