2019年5月5日 下午3:23
这篇文章最终要的就是举例说明了过度优化的问题,对操作系统写的并不是很好
同步是一种规则,而锁则是实现这种规则的具体方法。
- 同步,指的是多线程程序里,多个线程不得同时对某一共享变量进行访问
锁,所作为一种同步手段,是非常强的。但是,这种强,仅限于逻辑层面。在实际情况中,编译器优化、CPU 动态调度,都有可能打破锁对于同步的保护。这时候,这些优化就变成了过度优化。
- cpu动态调度:
- 程序在执行的过程中,出于效率的考量,两个(在当前线程中)没有依赖的指令可能会调换顺序执行
- eg:构造函数的执行和指针的赋值是互不依赖的
- 单例模式
- 编译器优化
- 编译器优化可能会破坏逻辑上的线程安全:
- eg:如果线程 1 在这之后会多次使用变量x,那么编译器可能会将x自增后的值存放在寄存器中,暂不写回
- cpu动态调度: