同步锁完全总结

2023-06-06  本文已影响0人  深圳都这么冷

1.进程同步问题

进程是不共享内存空间的,只有写共享的文件,磁盘区时需要互斥,如果要同步,使用记录锁(文件的某一段)或者文件锁(整个文件)。这种做法是君子协定,操作同一区域的程序必须遵守先请求锁再操作。如果不遵守,直接绕过锁也是没有办法禁止的

多个进程共享的锁,必须放在进程都可以访问的内存映射区域,其实这也是记录锁的变形

2.进程内的线程同步问题

2.1普通锁

普通线程锁,保护临界区

2.2 尝试锁,限时尝试锁

尝试锁如果拿不到直接带着错误码返回
限时尝试锁会先等待制定的时间,如果拿不到直接带着错误码返回
这种锁避免和无限阻塞

2.3 如果是协作线程同步,使用锁+条件变量

典型的如生产者消费者问题

2.4 锁的实现

Linux上为两阶段锁,先spin一次,如果失败再sleep

2.5 通用信号量

可以用来实现锁和条件变量

2.6 读写锁

读锁:共享锁
写锁:排他锁
读写锁可以使用信号量实现

2.7 可重入锁

获得锁的进程可以重复获得,这有利于临界区操作递归的场景,方便模块化设计

上一篇下一篇

猜你喜欢

热点阅读