Lab 01
Yang Haoran 5/28/2022 OS
# Lab 01
unsafe concurrency可以用automic operation来解决,但是代码过长又不能保证,所以用lock
自旋锁可以用在:使用关中断来保证不会发声死锁,因为时间很短
读写自旋锁:分为读锁和写锁
读可以多个一起读,但是只有在没有写的时候
写的时候其他进程都被阻塞
信号量机制:表示一个资源的剩余个数,等待获取信号量的进程会进入等待队列,但是不会像自旋锁一样占用cpu,因为当有信号量的时候,它会被被动唤醒
mutex是semaphores=1的情况(互斥)
程序top half:把不耗时部分放到top half,不可中断
程序bottom half:可被中断
sequential locks:引入版本号,write的时候会+1,read会一直重试直到开始读的sequential number=结束读的sequential number。适用于有很多reader,没有很多writer的情况
Pre-emption Disabling: pre-emptive抢占式的,可以通过设置关键区不可抢占来实现同步

read barrier,write barrier,阻止指令重排序的
加之前:

加之后:


RCU:读进程不会被阻塞
- 多用于传递的不是值而是指针的情况:Only works on dynamically allocated data that is referenced via pointers
summary
