linux - Linux 线程中的文件段/节/记录锁

标签 linux c locking concurrency multithreading

我有一个多线程进程,其中一个文件由多个线程共享(读取和写入)。有没有什么方法可以让一个线程锁定一个文件段,使其他线程无法访问它? 我试过fcntl(fd, F_SETLKW, &flock),但是这个锁只对进程有效,对线程无效(一个进程中的所有线程共享一个锁)。

最佳答案

是的 - 但不是使用相同的机制。您将不得不使用诸如 pthread 互斥体之类的东西,并自己跟踪簿记。

如何完成这项工作的可能大纲

  • 等待并在簿记结构上声明进程级互斥锁
    • 确保您的进程中没有其他线程正在尝试使用该段
    • 将自己标记为正在使用文件段
  • 释放进程级互斥锁

  • 为进程获取 fnctl 锁(如果需要)

  • 写作
  • 释放 fnctl 锁以允许其他进程使用该段(如果需要)

  • 再次等待进程级簿记结构互斥体(如果您可以自动将其标记为未使用,则可能没有必要)

    • 在您的流程中将段标记为未使用。
  • 释放进程级互斥量

关于linux - Linux 线程中的文件段/节/记录锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993120/

相关文章:

.net - 如何在 Kubernetes 中部署.net core?

python - 为什么 Python filelock 库在 Windows 而不是 UNIX 上删除锁定文件?

c - 如何在C中最后一行之前添加一行

c - malloc + strcpy 函数和 calloc 一样好吗?

java - JVM 中 .class 对象的同步范围

ARM Cortex-M : how to build proper executables 上的 Linux 内核

ruby-on-rails - 如何在没有 root 访问权限的情况下安装 Rails 和创建新应用程序?

c - 将数字打印到可变的小数位

spring - 如何使用spring在postgresql中锁定表

c++ - 如何锁定多个锁,其中一些是共享的,一些不是 C++