问题标签 [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.
java - Java - 锁定文件以进行独占访问
我的问题是:我正在使用 aWatchService
来获取有关特定文件夹中新文件的通知,现在如果文件在所述文件夹中被移动/复制或创建,则会触发事件并返回新文件的名称。现在的问题是,如果我尝试访问该文件并且它还没有完全存在(例如,副本仍在进行中),则会引发异常。我试图做这样的事情:
但是即使获得了锁,如果我尝试写入文件,有时仍然会引发异常,因为另一个进程仍然有一个打开的句柄。
现在,如何才能锁定 Java 中的文件以实现真正的独占访问?
php - 防止同时访问数据库表行
有时我们的支持团队中的两个管理员正在尝试对 db 表行执行相同的敏感操作(例如,修改行中的值)。我们需要防止这种情况。(行锁定是不可能的,因为表是“myisam”)
我想到了几个解决方案:
在表单中设置旧值并将其与提交时的当前值进行比较
然后在更新之前:
但可能有以下情况:
用户需要将货币价值从 9 美元更改为 10 美元
admin1 将他的钱更改为 10 美元
用户聪明地花了 1 美元,所以他现在的钱又变成了 9 美元!
admin2 在没有任何警告的情况下将他的钱更改为 10 美元。
在行中创建时间戳(updated_at 列)设置
并与解决方案 1 中的操作相同。这具有的优势在于,它说的不仅仅是简单的数据比较。我们可以肯定地说,在我们摆弄表格时数据是否发生了变化。缺点 - 我们无法追踪到底是哪一列发生了变化,除非我们将它与解决方案 1 结合使用
然后在更新时:
使用特定于对象/动作的名称创建临时 0 长度文件
在更新期间创建/锁定它,并在更新前检查它的存在/时间戳。
更新前:
目前,文件创建是我的首选方法,因为:
我认为创建本地文件比访问数据库更快。
我不需要在表中再添加一列(时间戳)
我可以轻松地修改文件名以检查特定列的修改,即在 mysqlupdate 完成时创建文件“money_user{$userid}_modified”。
这是对的还是我误解了什么?
php - PHP进程/服务器崩溃时如何避免文件死锁?
我是 PHP 新手。我知道flock()
当两个用户到达同一个 php 文件向可锁定文件添加内容时,我可以使用它来锁定文件并避免竞争条件。
但是,如果一个 php 进程崩溃了怎么办?下一个等待可锁定文件的用户会发生什么?如果服务器崩溃(有人拔掉插头)会发生什么?锁会自动释放吗?重新启动服务器后文件会保持锁定状态吗?
简而言之,PHP 是否确保正确处理此类危急情况(即未显式释放锁)?如果不是,应该如何处理这些情况?如何从这些中恢复?
sql-server - 系统进程正在锁定我的数据库文件 MDF
我无法访问我的数据库文件,因为“系统进程”正在锁定它。SQL 服务器服务目前未运行。
如何停止这种锁定,因为我有能力移动文件或用它做些什么?
编辑 1
所以,我已经解决了这个问题,但锁定的实际原因对我来说仍然未知。
我使用了 Unlocker 程序,它也无法确定锁定源,但具有在系统重新启动时程序文件移动的功能。我这样做了,然后放了另一个版本的文件,之前复制和修改过。
这个新的 fila 也和旧的一样,从来没有以同样的方式锁定。活动文件被看起来很平常的 sqlservr.exe 进程锁定。不会发生不可移除的锁定。
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,错误就会消失,但会在一两次构建后再次发生。不用说,这严重拖慢了我的速度。任何建议如何开始解决这个问题?
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
,将其条目作为泡菜存储在数据库中(我不会费心将任何内容保存在内存中,因为数据库访问和酸洗与我正在做的其他事情相比足够快)。我确信有更有效的方法可以做到这一点(我不知道我是否仍然存在并发问题),但这里是代码:
php - 如何使用群()
我想使用系统锁来避免竞争条件。一个过程是将捕获的图像保存到 .jpg 文件的 opencv 程序。另一个过程是浏览器从服务器获取相同的图像文件。我想避免这两个进程之间的竞争条件。我使用的羊群功能对吗?
我的opencv代码是:
我的 .php 文件是
该 php 由客户端使用 AJAX 调用。
c++ - 如何查询文件中所有锁持有者的窗口
我即将为我们的软件实现一项新功能,即在用户打开文档时锁定文档(之前我们只是打开文件进行读取或写入,但在此期间没有保持句柄打开)。
保留句柄并以独占模式打开它是微不足道的。
我的问题是如何查询窗口以发现给定文件是否无法通过写访问打开,哪个用户/实体已经锁定了文件以进行写访问?
例如:
或者
其中任何一个都以独占写入访问权限打开给定文件(或失败并显示错误指示是否存在共享冲突或其他问题)。
但是我想要做的是发现“谁”锁定了文件,如果它是共享冲突,那么我可以向当前用户报告
Sam 在 PC-007 上已锁定此文件,您只能以只读模式打开它。你要继续吗?
我见过一些实用程序,它们会告诉你谁锁定了文件——还有更多会强制解锁锁,以便可以操作文件(sys-admin 类型的实用程序)。因此,似乎必须有一种方法可以查询此信息。
java - 如何在java中实现文件夹锁定
我想锁定特定文件夹,并且我有代码,但发现“java.io.FileNotFoundException:(访问被拒绝)”错误
任何人都可以解决这个问题