问题标签 [file-locking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
465 浏览

python - Python中的文件锁

可能重复:
在 Python 中锁定文件

我想获得一个文件的锁并阻止其他进程写入这个文件。我应该使用哪个模块和功能?

谢谢。

0 投票
2 回答
6521 浏览

java - Java - 锁定文件以进行独占访问

我的问题是:我正在使用 aWatchService来获取有关特定文件夹中新文件的通知,现在如果文件在所述文件夹中被移动/复制或创建,则会触发事件并返回新文件的名称。现在的问题是,如果我尝试访问该文件并且它还没有完全存在(例如,副本仍在进行中),则会引发异常。我试图做这样的事情:

但是即使获得了锁,如果我尝试写入文件,有时仍然会引发异常,因为另一个进程仍然有一个打开的句柄。

现在,如何才能锁定 Java 中的文件以实现真正的独占访问?

0 投票
4 回答
1577 浏览

php - 防止同时访问数据库表行

有时我们的支持团队中的两个管理员正在尝试对 db 表行执行相同的敏感操作(例如,修改行中的值)。我们需要防止这种情况。(行锁定是不可能的,因为表是“myisam”)

我想到了几个解决方案:

在表单中设置旧值并将其与提交时的当前值进行比较

然后在更新之前:

但可能有以下情况:

  1. 用户需要将货币价值从 9 美元更改为 10 美元

  2. admin1 将他的钱更改为 10 美元

  3. 用户聪明地花了 1 美元,所以他现在的钱又变成了 9 美元!

  4. admin2 在没有任何警告的情况下将他的钱更改为 10 美元。

在行中创建时间戳(updated_at 列)设置

并与解决方案 1 中的操作相同。这具有的优势在于,它说的不仅仅是简单的数据比较。我们可以肯定地说,在我们摆弄表格时数据是否发生了变化。缺点 - 我们无法追踪到底是哪一列发生了变化,除非我们将它与解决方案 1 结合使用

然后在更新时:

使用特定于对象/动作的名称创建临时 0 长度文件

在更新期间创建/锁定它,并在更新前检查它的存在/时间戳。

更新前:

目前,文件创建是我的首选方法,因为:

  1. 我认为创建本地文件比访问数据库更快。

  2. 我不需要在表中再添加一列(时间戳)

  3. 我可以轻松地修改文件名以检查特定列的修改,即在 mysqlupdate 完成时创建文件“money_user{$userid}_modified”。

这是对的还是我误解了什么?

0 投票
1 回答
1130 浏览

php - PHP进程/服务器崩溃时如何避免文件死锁?

我是 PHP 新手。我知道flock()当两个用户到达同一个 php 文件向可锁定文件添加内容时,我可以使用它来锁定文件并避免竞争条件。

但是,如果一个 php 进程崩溃了怎么办?下一个等待可锁定文件的用户会发生什么?如果服务器崩溃(有人拔掉插头)会发生什么?锁会自动释放吗?重新启动服务器后文件会保持锁定状态吗?

简而言之,PHP 是否确保正确处理此类危急情况(即未显式释放锁)?如果不是,应该如何处理这些情况?如何从这些中恢复?

0 投票
2 回答
3045 浏览

sql-server - 系统进程正在锁定我的数据库文件 MDF

我无法访问我的数据库文件,因为“系统进程”正在锁定它。SQL 服务器服务目前未运行。

如何停止这种锁定,因为我有能力移动文件或用它做些什么?

编辑 1

所以,我已经解决了这个问题,但锁定的实际原因对我来说仍然未知。

我使用了 Unlocker 程序,它也无法确定锁定源,但具有在系统重新启动时程序文件移动的功能。我这样做了,然后放了另一个版本的文件,之前复制和修改过。

这个新的 fila 也和旧的一样,从来没有以同样的方式锁定。活动文件被看起来很平常的 sqlservr.exe 进程锁定。不会发生不可移除的锁定。

0 投票
6 回答
10509 浏览

visual-studio-2010 - Visual Studio 2010 构建失败到文件复制错误

我在 Visual Studio 2010 中构建一个项目,构建失败,因为它无法将 assemblyname.dll 文件从 obj 复制到 bin 文件夹。确切的错误信息是:

错误 7 无法将文件“obj\Debug\AssemblyName.dll”复制到“bin\AssemblyName.dll”。无法对打开了用户映射部分的文件执行请求的操作。

我认为这是因为 bin-folder 中的前一个文件不可访问。当我尝试手动删除文件时,出现错误“无法完成该操作,因为该文件已在另一个程序中打开”。如果我尝试查看使用 Unlocker 锁定文件的应用程序,我不会得到任何结果(未找到锁定句柄)。

如果我重新启动 Visual Studio,错误就会消失,但会在一两次构建后再次发生。不用说,这严重拖慢了我的速度。任何建议如何开始解决这个问题?

0 投票
2 回答
2571 浏览

python - Python中的持久记忆

我有一个昂贵的函数,它接受并返回少量数据(一些整数和浮点数)。我已经记住了这个功能,但我想让备忘录持久化。已经有几个线程与此相关,但我不确定某些建议方法的潜在问题,并且我有一些相当具体的要求:

  • 我肯定会同时使用来自多个线程和进程的函数(使用multiprocessing和来自单独的 python 脚本)
  • 我不需要从这个 python 函数之外读取或写入备忘录
  • 我并不担心备忘录在极少数情况下被损坏(比如拔掉插头或意外写入文件而不锁定它),因为重建并不昂贵(通常 10-20 分钟),但我更喜欢它不会因为异常或手动终止 python 进程而损坏(我不知道这有多现实)
  • 我非常喜欢不需要大型外部库的解决方案,因为我在一台机器上的硬盘空间非常有限,我将在其上运行代码
  • 我对跨平台代码的偏好很弱,但我可能只会在 Linux 上使用它

该线程讨论了该shelve模块,该模块显然不是进程安全的。其中两个答案建议使用fcntl.flock锁定搁置文件。然而,这个线程中的一些回复似乎表明这充满了问题——但我不确定它们是什么。听起来好像这仅限于 Unix(尽管显然 Windows 有一个等效的称为msvcrt.locking),并且锁定只是“建议”-即,它不会阻止我在不检查文件是否已锁定的情况下意外写入文件。还有其他潜在的问题吗?写入文件副本并在最后一步替换主副本会降低损坏风险吗?

看起来dbm 模块不会比搁置更好。我已经快速浏览了一下sqlite3,但为此目的似乎有点矫枉过正。 这个线程这个线程提到了几个 3rd 方库,包括ZODB,但是有很多选择,而且对于这项任务来说,它们似乎都过于庞大和复杂。

有人有建议吗?

更新:下面都提到了 IncPy,看起来确实很有趣。不幸的是,我不想回到 Python 2.6(我实际上使用的是 3.2),而且与 C 库一起使用看起来有点尴尬(我大量使用 numpy 和 scipy 等)。

kindall 的另一个想法很有启发性,但我认为将其应用于多个进程会有点困难——我想用文件锁定或数据库替换队列是最简单的。

再次查看 ZODB,它看起来确实非常适合这项任务,但我确实想避免使用任何额外的库。我仍然不完全确定简单使用的所有问题是什么flock- 我想一个大问题是如果一个进程在写入文件时终止,或者在释放锁之前?

所以,我接受了 synthesizerpatel 的建议并选择了 sqlite3。如果有人感兴趣,我决定做一个替代品dict,将其条目作为泡菜存储在数据库中(我不会费心将任何内容保存在内存中,因为数据库访问和酸洗与我正在做的其他事情相比足够快)。我确信有更有效的方法可以做到这一点(我不知道我是否仍然存在并发问题),但这里是代码:

0 投票
1 回答
4263 浏览

php - 如何使用群()

我想使用系统锁来避免竞争条件。一个过程是将捕获的图像保存到 .jpg 文件的 opencv 程序。另一个过程是浏览器从服务器获取相同的图像文件。我想避免这两个进程之间的竞争条件。我使用的羊群功能对吗?

我的opencv代码是:

我的 .php 文件是

该 php 由客户端使用 AJAX 调用。

0 投票
1 回答
653 浏览

c++ - 如何查询文件中所有锁持有者的窗口

我即将为我们的软件实现一项新功能,即在用户打开文档时锁定文档(之前我们只是打开文件进行读取或写入,但在此期间没有保持句柄打开)。

保留句柄并以独占模式打开它是微不足道的。

我的问题是如何查询窗口以发现给定文件是否无法通过写访问打开,哪个用户/实体已经锁定了文件以进行写访问?

例如:

或者

其中任何一个都以独占写入访问权限打开给定文件(或失败并显示错误指示是否存在共享冲突或其他问题)。

但是我想要做的是发现“谁”锁定了文件,如果它是共享冲突,那么我可以向当前用户报告

Sam 在 PC-007 上已锁定此文件,您只能以只读模式打开它。你要继续吗?

我见过一些实用程序,它们会告诉你谁锁定了文件——还有更多会强制解锁锁,以便可以操作文件(sys-admin 类型的实用程序)。因此,似乎必须有一种方法可以查询此信息。

0 投票
2 回答
7598 浏览

java - 如何在java中实现文件夹锁定

我想锁定特定文件夹,并且我有代码,但发现“java.io.FileNotFoundException:(访问被拒绝)”错误

任何人都可以解决这个问题