文件锁
- Linux 提供了
fcntl
系统调用,可以锁定文件 - 但是文件锁是和进程相关联的,一个进程中的多个线程/协程对同一个文件进行的锁操作会互相覆盖掉,从而无效。
fcntl
创建的锁是建议性锁,只有写入的进程和读取的进程都遵循建议才有效;对应的有强制性锁,会在每次文件操作时进行判断,但性能较差,因此 Linux/Unix 系统默认采用的是建议性锁。
写入日志文件
- 使用
O_APPEND
标志来打开文件,这样在每次写入时都会lseek
到文件末尾进行写入,这是一个原子操作,因此不会产生同步问题。
参考链接
- Linux 中多个进程操作同一个文件时会发生什么