linux同步机制

原子操作: 原子操作是由编译器来保证的,保证一个线程对数据的操作不会被其他线程打断。当线程正在对一个变量操作而这个操作过程不想被其他线程打断时,可以用原子操作,原子操作结构体(atomic_t)
原子操作缺点:会阻塞优先级很高的线程。
自旋锁:当一个线程在读写一个共享资源时,加上自旋锁,其他想要读写这个共享资源的线程就会一直处于忙等状态,循环检测保持者已经释放了锁,互斥量阻塞后休眠让出cpu,而自旋锁阻塞后不会让出cpu,会一直忙等待,直到得到锁。(重点:忙等、读写均会锁住)
读写锁:CPU内的一个结构体(rwlock_t),本质上是一个有符号整数(原子变量),初始值为2的整数次幂。当有线程对共享资源申请写操作时,先判断该值是否为初始值,如果是,则可以写入,读写锁变为0;如果不是,则无法写入。当有线程读取该共享资源时,先判断该值减1是否为负,如果是,则说明有线程在写入,读取失败,如果不为0,则可以读取,读取时此值加1,防止读取过程中有线程写入。
读写锁缺点:会造成写饥饿。(当一个线程长时间读,无法写入)
顺序锁:针对读写锁的缺点,在读取时可以写入,不必等待。只有写之间会锁住。
以上自旋锁、读写锁、顺序锁、等待锁的线程均处于忙等。会占用CPU,但实时性更强。如果不想让线程忙等,可以使用信号量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值