随笔分类 - 并发
C++ 资源管理 —— RAII
摘要:RAII:在构造函数中申请资源,在析构函数中释放资源。1. RAII 自动实现锁资源的释放void bad() { m.lock(); f(); if (COND) return; m.unlock();}显然如果提前返回,会导致死锁。clas...
阅读全文
Java 并发 —— volatile 关键字
摘要:volatile 修饰变量等于向编译器传达如下两层含义: 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。禁止进行指令重排序。volatile 关键字定义了读写发生的次序: 对一个变量(被 volatile ...
阅读全文
C++ 多线程与并发
摘要:1. 非原子操作 这些非原子操作在被编译为汇编代码后不止一条指令。自加、自减少;new 关键字;申请内存;调用构造函数;pInst = new T;// 对于这样一个赋值语句,更是包含了如下:// 1. 申请内存空间;// 2. 在内存的位置上调用构造函数;// 3...
阅读全文
Java 并发 —— 读写锁(ReadWriteLock)
摘要:读写锁(ReadWriteLock),顾名思义,就是在读写某文件时,对该文件上锁。1. ReentrantReadWriteLock三部曲: 加锁;读写操作;解锁;(为保证解锁操作一定执行,通常将其置于 finally 代码段内)2. 将读写锁应用于集合类上使得集合线...
阅读全文
Java 并发 —— Thread、Executor、线程池
摘要:Java 线程池: ThreadPoolExecutor,创建此线程池的方法: newExecutors.newCachedThreadPool():尽量避免使用,其无法控制线程数量,ScheduledThreadPoolExecutor:定时执行;1. Thread...
阅读全文
【线程安全】—— 单例类双重检查加锁(double-checked locking)
摘要:1. 三个版本单例类的实现版本1:经典版public class Singleton { public static Singleton getInstance() { if (instance == null) { // 进...
阅读全文
并发与计算机体系结构
摘要:多核 CPU,意味着多个 CPU,每一个核心对应着一个 CPU;0. 主存与缓存计算机在执行程序时,每条指令都是在 CPU 中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CP...
阅读全文
浙公网安备 33010602011771号