嗨。我正在尝试使用多个线程访问文件, 尝试与记录锁(fcntl)同步。
问题是,fcntl 不锁定文件。
我尝试过: 每个线程都有自己的文件描述符/一个文件描述符(全局), 检查了fcntl的参数,但没有找到原因或解决方案。
我写的函数有什么问题吗?或者在多线程中使用 fcntl 时可能需要了解一些信息?
fcntl 实现进程级锁定。显然,所有线程都位于同一个进程中,因此没有中间锁(或者,换句话说:进程中的所有线程共享相同的锁)。
Linux 手册页说:
进程中的线程共享锁。 换句话说,一个 多线程程序不能使用记录锁定来确保 线程不会同时访问文件的同一区域。
fcntl是进程级别的,可以使用flock