Lock-Free编程

Lock-Free定义

In an infinite execution, infinitely often some method call finishes.

在无穷的执行时间里,不断地有方法调用被完成

Lock-Free特征

  • 不使用互斥锁
  • 需要原子操作的保证
  • 多线程不互斥地访问共享内存
  • 没有任何线程调度序列会让程序整体锁死

Lock-Free相关技术

在Lock-Free编程中,当需要讨论多线程如何并发访问共享内存时,大体可以可以分为两个方向:单个写线程和多个写线程。

单个写线程的场景下通常使用传信号的合作方式,例如Acquire and Release语义,即写线程的写操作完成后,发布一个操作完成的信号,各个读线程接收到该信号后,对值进行读取。使用这个方式需要注意内存重排序带来的可见性问题

多个写线程的场景下通常使用互相竞争的方式,例如CAS操作。使用这个方式需要注意ABA问题,同样需要注意内存重排序带来的可见性问题

参考文档