操作系统复习-线程同步

互斥量

在这里插入图片描述

  • 两个线程的指令交叉执行
  • 互斥量可以保证先后执行
  • 称为原子性
    在这里插入图片描述
    在这里插入图片描述
  • 原子性是指一系列操作不可被中断的特性
  • 这一系列操作要么全部执行完成,要么全部没有执行
  • 不存在部分执行部分未执行的情况

互斥锁

  • 互斥量是最简单的线程同步的方法
  • 互斥锁,处于两态之一的变量,解锁和加锁
  • 两个状态可以保证资源访问的串行
  • 操作系统直接提供了互斥量的API
  • 开发者可以直接使用API完成资源的加锁,解锁操作

自旋锁

在这里插入图片描述

  • 自旋锁也是一种多线程同步的变量
  • 使用自旋锁的线程会反复检查锁变量是否可用
  • 自旋锁不会让出CPU,是一种忙等待状态
  • 死循环等待锁被释放
  • 自旋锁避免了进程或线程上下文切换的开销
  • 操作系统内部很多地方使用的是自旋锁
  • 自旋锁不适合在单核CPU使用

读写锁

  • 临界资源多读少写
  • 读取的时候并不会改变临界资源的值
  • 是否存在效率更高的同步方法
  • 读写锁是一种特殊的自旋锁
  • 允许多个读者同时访问资源以提高读性能
  • 对于写操作则是互斥的
    在这里插入图片描述
  • pthread_rwlock_t
  • pthread_rwlock_rdlock(读锁)
  • pthread_rwlock_wrlock(写锁)

条件变量

  • 条件变量是一种相对复杂的线程同步方法
  • 条件变量允许线程睡眠,知道满足某种条件
  • 当满足条件时,可以向该线程信号,通知唤醒
  • 缓冲区小于等于0时,不允许消费者消费,消费者必须等待
  • 缓冲区满时,不允许生产者往缓冲区生产,生产者必须等待
  • 当生产者生产一个产品时,唤醒可能等待的消费者
  • 当消费者消费一个产品时,唤醒可能等待的生产者

条件变量使用

  • 需要配合互斥量使用
  • pthread_cond_t
  • pthread_cond_wait(等待条件满足)
  • pthread_cond_notify(等待被唤醒)

总结

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值