文件锁之fcntl
文件锁的作用:当第一个进程正在读或修改文件的某个部分时,使用文件锁可以阻止其他进程修改文件的相同部分。
因此文件锁可用于多个进程之间进行同步,防止进程间的竞争状态。
Linux系统支持两组给文件加锁的不同API,分别是fcntl
与flock
。本节主要记录fcntl
的实现原理以及使用方式。
任意多个进程在同一个给定字节上都可以有一把共享读锁,但一个给定字节上仅能有一个进程持有一把独占写锁。
专注于工业物联网行业数据采集,嵌入式Linux系统裁剪,5G智慧网关软件开发等
文件锁的作用:当第一个进程正在读或修改文件的某个部分时,使用文件锁可以阻止其他进程修改文件的相同部分。
因此文件锁可用于多个进程之间进行同步,防止进程间的竞争状态。
Linux系统支持两组给文件加锁的不同API,分别是fcntl
与flock
。本节主要记录fcntl
的实现原理以及使用方式。
任意多个进程在同一个给定字节上都可以有一把共享读锁,但一个给定字节上仅能有一个进程持有一把独占写锁。
系统调用分为两类,“低速”系统调用和其他。
“低速”系统调用指的是可能会使进程永远阻塞的一类系统调用。
非阻塞I/O则指的是当进行诸如open, read, write
等I/O操作时,这些操作不会永远阻塞。如果操作不能完成,则调用立即出错返回,以表示继续该操作将会阻塞。
一般非阻塞I/O需要不断轮询判断是否有数据要进行读写,这种情况是比较浪费CPU时间的。避免非阻塞I/O的两种方式:I/O多路转接或多线程采用阻塞I/O。