【问题标题】:fcntl not working (doesn't lock the file) in multi-threaded programmefcntl 在多线程程序中不起作用(不锁定文件)
【发布时间】:2021-05-09 09:32:10
【问题描述】:

fcntl using code

嗨。我正在尝试使用多个线程访问文件, 试图与记录锁(fcntl)同步。

问题是,fcntl 没有锁定文件。

result

我试过了: 每个线程都有自己的文件描述符/一个文件描述符(全局), 检查了fcntl的参数,但没有找到原因或解决方法。

我写的函数有什么问题吗?或者在多线程中使用 fcntl 时需要了解的一些信息?

【问题讨论】:

  • 请不要将代码发布为图像:在问题中包含文本并使用 代码示例 标记({} 按钮)将其标记为代码。关于问题本身:您尝试访问的文件是本地文件还是通过某种网络访问它?
  • 欢迎来到 Stack Overflow。请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。最后请学习如何创建一个minimal reproducible example,您可以在问题本身中显示它。
  • 我知道我应该在代码中加上标记并首先阅读通知。谢谢你。该文件是本地文件。

标签: c linux systems-programming fcntl


【解决方案1】:

fcntl 实现了进程级 锁定。显然,您的所有线程都存在于同一个进程中,因此没有中间锁(或者,换句话说:进程中的所有线程共享相同的锁)。

Linux 手册页说:

进程中的线程共享锁。换句话说,一个 多线程程序不能使用记录锁定来确保 线程不会同时访问文件的同一区域。

【讨论】:

  • 我明白了……所以在单个进程、多线程程序中使用记录锁定是不合适的。谢谢。
  • 嗯,它是 - 保护您的记录免受来自进程外部的并发访问。在您自己的进程中,您还需要做的是使用您自己的内部锁定结构和线程之间的一些互斥体来维护并发访问。我在评论中链接的问题有一些有用的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2020-05-24
  • 2020-11-01
  • 1970-01-01
  • 2021-03-29
  • 2022-12-06
  • 1970-01-01
相关资源
最近更新 更多