我有一个多线程进程,其中一个文件由多个线程共享(读取和写入)。有没有什么方法可以让一个线程锁定一个文件段,使其他线程无法访问它?
我试过fcntl(fd, F_SETLKW, &flock)
,但是这个锁只对进程有效,对线程无效(一个进程中的所有线程共享一个锁)。
最佳答案
是的 - 但不是使用相同的机制。您将不得不使用诸如 pthread 互斥体之类的东西,并自己跟踪簿记。
如何完成这项工作的可能大纲
- 等待并在簿记结构上声明进程级互斥锁
- 确保您的进程中没有其他线程正在尝试使用该段
- 将自己标记为正在使用文件段
释放进程级互斥锁
为进程获取 fnctl 锁(如果需要)
- 写作
释放 fnctl 锁以允许其他进程使用该段(如果需要)
再次等待进程级簿记结构互斥体(如果您可以自动将其标记为未使用,则可能没有必要)
- 在您的流程中将段标记为未使用。
- 释放进程级互斥量
关于linux - Linux 线程中的文件段/节/记录锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993120/