其他分享
首页 > 其他分享> > 同步原语

同步原语

作者:互联网

由于并发访问共享资源时,对共享资源的竞争(程序的正确性依赖于特定的执行顺序)导致错误,操作系统提供同步原语供开发者使用。

互斥锁

01 临界区问题

  1. 互斥访问:同一时刻,至多一个线程可以进入临界区。
  2. 有限等待:当一个线程申请进入临界区后,必须在有限时间内获得许可并进入临界区,不能无限等待。
  3. 空闲让进:当没有线程执行临界区代码时,必须在申请进入临界区的线程中选择一个,允许其执行代码,保证程序执行的进展。

02 互斥锁的硬件实现:关闭中断

03 互斥锁的软件实现:皮特森算法,解决只有两个线程的情况。

04 软硬件协同:使用原子操作实现互斥锁。

条件变量

通过使用条件变量接口,一个线程可以停止使用cpu并将自己挂起,当等待条件满足后,其他线程会唤醒使它继续执行。场景:避免线程的循环忙等。必须搭配互斥锁一起使用,用于保护对条件的判断与修改。

信号量

根据剩余资源数量控制不同线程的执行。

读写锁

在多个读操作同时进行时不需要互斥锁。针对读者与写者分别提供不同的加锁解锁操作。

RCU Read Copy Update

多读者并行,写者不会阻塞读者。通过订阅/发布机制(保证顺序和原子性,修改链表节点),让写者原子的更新任意大小的数据;

同步带来的问题

01 死锁

02 活锁

03 优先级反转:由于同步导致线程执行顺序违反预设优先级问题。

标签:同步,优先级,写者,临界,互斥,原语,线程,读者
来源: https://blog.csdn.net/weixin_43825881/article/details/116233920