走进原子性
走进原子性 问题:线程之间的协作 标准解决方法:上锁 实现一个计数器和互斥锁 locking的问题 硬件同步的早期 Compare and Swap(CAS) 用CAS来实现计数器 lock-free和wait-free算法 原子变量类 细颗粒度意味着轻量级 十五年前,多核处理器是特别的系统,需要花费成百上千的美元。今天,多核处理器系统又便宜又丰富,几乎每一个主要的微处理器都对并发有内部支持。 为了利用好多核的优势,软件也架构在多线程上。但是,仅仅将一个工作简单地划分为几个线程并不能发挥出硬件的优势-----你必须要确保你的线程大部分时间是在工作,而不是在等待工作,或者是在共享数据结构上等锁。 问题:线程之间的协作 几乎没有task能够真正地并发运行,不需要线程之间的协作。想象一个线程池,那里tasks是互相独立地运行的。假如一个线程池要为一个queue工作,那么为queue加入或者删除元素都必须是线程安全的,那意味着在head,tail,或者内部node的引用之间的协作。正是这样的协作导致了所有的问题。 标准解决方法:上锁 对于共享字段的协作获取的传统做法是通过synchronize,它确保所有对共享字段的获取都是拿着锁的状态。使用synchronize,你可以确保不管哪个保护着一些变量的线程取得锁,它都会对这些变量有着独享,而对这些变量的改变又会变成可见的