适用场景
并发与竞争是在多个线程、进程或中断访问共享资源时产生的。这个共享资源看着有点笼统,具体就是全局变量或者数组,经过总线访问的数据都有可能。
处理办法
处理竞争的方法通常有原子操作、自旋锁、信号量、互斥锁等。
原子操作针对的是变量处理,像是全局变量就可以通过原子操作处理;
锁中间带进程切换的要用互斥锁,用自旋锁会造成死锁;
中断中要用自旋锁,用互斥锁会导致休眠(这个不能用并不是不能做到,而是不应该这样做。导致休眠可能会有产生很多问题,比如调用个阻塞的线程之类的,也可能会产生死锁,也可能产生大量延迟);
互斥锁的开销要比自旋锁大不少,如果都可以使用的话,使用自旋锁可以减小开销,自旋锁主要用于多核的并发处理。
以上指的是轮训状态,带优先级的抢占或者不同优先级的中断需要更需要设计者根据具体的考虑了,比如自旋锁要是被更高级的抢占了就会导致死锁。