WaitGroup
本质上是用于等待一组任务完成的计数同步原语
TAG_COLLECTION //
共有 11 篇笔记使用了这个 Tag。
本质上是用于等待一组任务完成的计数同步原语
简单来说,就是不可被中断的操作,要么完全执行,要么不执行,不存在中间状态
首先,CPU 访问速度和主内存的运行速度一定存在差异,且 CPU 的速度快于内存的速度。假设没有缓存机制,那么代码的执行顺序——从内存中读取指令和必要数据等,然后运算,接着等待内存传输数据,这边等待的时候,就严重降低了运算速度——我们的运算上限被内存的运算速度给限制住了!
首先对于单个原子操作语句来说, 它在外部看来一定是原子操作(废话), 也就是不存在“中间态”.
是共享状态进行访问或修改的代码片段,要求在任意时刻,线程执行到这个片段的时候,只有唯一一种执行流可以正确执行以保证数据的不变性
一个重点在关注数据上的建模. 原先最朴素的做法是把生产和消费是串行并且集成在同一个模块内 —— 即生产完成后直接进行消费, 那么此时生产和消费在执行时序上是紧密关联的.
或许可以大致分为三个部分 ——
虽然一直在说“锁可以保护临界区资源”,但是忽然发现笔记中没有任何一篇专门说锁的??!
与锁不同,它感觉更偏向是线程之间通讯的一种方式 —— A 因需要等待某条件为真后才能继续运行于是进入 waiting 状态;此时 B 执行到设置这个条件为真后, A 继续运行
std::atomic, 用于定义原子变量, 允许多个线程按照 C++ 内存模型进行读写等操作. 一般用于线程之间共享状态等.
条件变量, 用于阻塞等待的同步元语.