1.进程同步问题
进程是不共享内存空间的,只有写共享的文件,磁盘区时需要互斥,如果要同步,使用记录锁(文件的某一段)或者文件锁(整个文件)。这种做法是君子协定,操作同一区域的程序必须遵守先请求锁再操作。如果不遵守,直接绕过锁也是没有办法禁止的
多个进程共享的锁,必须放在进程都可以访问的内存映射区域,其实这也是记录锁的变形
2.进程内的线程同步问题
2.1普通锁
普通线程锁,保护临界区
2.2 尝试锁,限时尝试锁
尝试锁如果拿不到直接带着错误码返回
限时尝试锁会先等待制定的时间,如果拿不到直接带着错误码返回
这种锁避免和无限阻塞
2.3 如果是协作线程同步,使用锁+条件变量
典型的如生产者消费者问题
2.4 锁的实现
Linux上为两阶段锁,先spin一次,如果失败再sleep
2.5 通用信号量
可以用来实现锁和条件变量
2.6 读写锁
读锁:共享锁
写锁:排他锁
读写锁可以使用信号量实现
2.7 可重入锁
获得锁的进程可以重复获得,这有利于临界区操作递归的场景,方便模块化设计