随笔分类 - 并发
摘要:先上结论: 一切互斥操作的依赖是 自旋锁(spin_lock),互斥量(semaphore)等其他需要队列的实现均需要自选锁保证临界区互斥访问。 而自旋锁需要xcmpchg等类似的可提供CAS操作的硬件指令提供原子性 和 可见性,(xcmpchg会锁总线或缓存行,一切会锁总线或缓存行的操作都会刷St
阅读全文
摘要:MESI 的最终目的是 让 SMP 架构中,多个CPU核心的缓存行对某个核心CPU来说是同一个缓存行,也就是一个CPU核心观察多个CPU核心的缓存行如同观察自己的缓存行一样 如果 CPU 满足 MESI 协议,那么 可以把 缓存行 和 内存看作一个统一的存储系统 MESI 每个字母代表一个状态,转换
阅读全文
摘要:1.Java7 多线程 put put -> 容量到达上限 -> 扩容(resize) -> transfer (转移旧散列表上的节点到新散列表) 在 transfer 这一步,因为Java7 使用了头插法,可能会导致某个线程的新散列表的某个槽成环 本质问题是 假如一个线程已经 transfer 完
阅读全文
摘要:上述有三个队列,这些队列中的节点,都是线程包装成的 ObjectWaiter 在默认策略情况下: 1.entry_list 中的 节点是等待被唤醒的节点,持有重量级锁的线程执行 exit 方法(Java层面:退出上述 synchronized区或调用 wait()方法 会调用 (C++层面)exit
阅读全文
摘要:Abstract : 如今大数据,云计算,分布式系统等对算力要求高的方向如火如荼。提升计算机算力的一个低成本方法是增加CPU核心,而不是提高单个硬件工作效率。 这就要求软件开发者们能准确,熟悉地运用高级语言编写出能够充分利用多核心CPU的软件,同时程序在高并发环境下要准确无误地工作,尤其是在商用环境
阅读全文