Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fcntl在多线程程序中不工作(不锁定文件)_C_Linux_Systems Programming_Fcntl - Fatal编程技术网

fcntl在多线程程序中不工作(不锁定文件)

fcntl在多线程程序中不工作(不锁定文件),c,linux,systems-programming,fcntl,C,Linux,Systems Programming,Fcntl,嗨。我正在尝试使用多个线程访问一个文件, 正在尝试使用记录锁(fcntl)获取同步 问题是,fcntl不会锁定文件 我试过: 每个线程都有自己的文件描述符/一个文件描述符(全局), 已检查fcntl的参数,但未找到原因或解决方案 我写的函数有什么问题吗?或者,在多线程中使用fcntl时需要知道什么?fcntl实现进程级锁定。显然,所有线程都生活在同一个进程中,因此不存在中间锁(或者换句话说,一个进程中的所有线程都共享相同的锁) Linux手册页上说: 进程中的线程共享锁。换句话说,一个 多线程

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

问题是,fcntl不会锁定文件

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

我写的函数有什么问题吗?或者,在多线程中使用fcntl时需要知道什么?

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

Linux手册页上说:

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


请不要将代码作为图像发布:在问题中包含文本,并使用代码示例标记(
{}
按钮)将其标记为代码。关于问题本身:您试图访问的文件是本地文件还是通过某种网络访问的文件?欢迎使用堆栈溢出。请阅读,带上SO,阅读,以及。最后,请学习如何创建一个可以显示在问题本身内部的通知。我知道我应该先将代码和标记放在一起,然后阅读通知。非常感谢。该文件是本地文件。另请参见此问题:我看到。。。因此,在单个进程、多线程程序中使用记录锁定是不合适的。谢谢。好吧,这是为了保护您的记录不被进程外部的并发访问。除此之外,您还需要在自己的进程中使用自己的内部锁定结构和线程之间的一些互斥体来维护并发访问。我在评论中提到的问题有一些有用的建议。