什么是无锁编程?
无锁编程就是lockfree,可以google搜索一堆示例代码。上面也说了一些了,现代CPU都支持CAS的原子操作。
CAS实现的Lock Free本质上就是说,当有两个线程同时操作一个值的时候,我再操作之前先读一下这个对象的值。
操作完成后,我需要修改这个值的时候,做一次CAS操作,如果Compare成功,那么表示这时候没有其他线程对他进行修改,我直接SWAP,也就是修改这个值。这时候,有其他线程进来后,发现值已经和之前不一样了,也就是compare失败,则不修改。
因为CAS是原子的,所以比较和swap不会有中间态,既可保证整个操作的无锁性,但是有ABA的情况,所以一般这个值的某几位,你需要设置一个操作序列号,每次操作需要+1
无锁编程就是lockfree,可以google搜索一堆示例代码,现代CPU都支持CAS的原子操作。
CAS实现的Lock Free本质上就是说,当有两个线程同时操作一个值的时候,我再操作之前先读一下这个对象的值。
操作完成后,我需要修改这个值的时候,做一次CAS操作,如果Compare成功,那么表示这时候没有其他线程对他进行修改,我直接SWAP,也就是修改这个值。这时候,有其他线程进来后,发现值已经和之前不一样了,也就是compare失败,则不修改。
因为CAS是原子的,所以比较和swap不会有中间态,既可保证整个操作的无锁性,但是有ABA的情况,所以一般这个值的某几位,你需要设置一个操作序列号,每次操作需要+1
赞0
踩0