问题标签 [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 投票
7 回答
59833 浏览

python - 在 Python 中打开文件以进行独占访问的最佳方法是什么?

解决这个问题的最优雅的方法是什么:

  • 打开文件进行读取,但前提是它尚未打开以进行写入
  • 打开文件进行写入,但前提是它尚未打开以进行读取或写入

内置函数是这样工作的

scr.txt 现在包含“111”。

scr.txt 已被覆盖,现在包含“222”(在 Windows 上,Python 2.4)。

该解决方案应该在同一个进程(如上面的示例中)以及另一个进程打开文件时工作。
如果一个崩溃的程序不会保持锁打开,这是首选。

0 投票
8 回答
124591 浏览

multithreading - 递归锁(互斥锁)与非递归锁(互斥锁)

POSIX 允许互斥体是递归的。这意味着同一个线程可以两次锁定同一个互斥体并且不会死锁。当然也需要解锁两次,否则其他线程无法获得互斥量。并非所有支持 pthread 的系统也支持递归互斥锁,但如果它们想要符合 POSIX 标准,它们必须.

其他 API(更高级的 API)通常也提供互斥锁,通常称为锁。一些系统/语言(例如 Cocoa Objective-C)同时提供递归和非递归互斥锁。有些语言也只提供一种或另一种。例如,在 Java 中,互斥锁总是递归的(同一个线程可能在同一个对象上“同步”两次)。根据它们提供的其他线程功能,没有递归互斥锁可能没有问题,因为它们可以很容易地自己编写(我已经在更简单的互斥锁/条件操作的基础上自己实现了递归互斥锁)。

我不太明白:非递归互斥锁有什么用?如果它两次锁定同一个互斥锁,为什么我会想要一个线程死锁?即使是可以避免这种情况的高级语言(例如测试这是否会死锁并抛出异常)通常也不会这样做。他们会让线程死锁。

这仅适用于我不小心将其锁定两次并且仅将其解锁一次的情况,并且在递归互斥锁的情况下,将更难找到问题,因此我立即将其死锁以查看不正确的锁定出现在哪里?但是我不能在解锁时返回一个锁计数器做同样的事情吗?在我确定我释放了最后一个锁并且计数器不为零的情况下,我可以抛出异常或记录问题吗?还是我没有看到其他更有用的非递归互斥锁用例?或者它可能只是性能,因为非递归互斥体可能比递归互斥体稍微快一点?但是,我对此进行了测试,差异确实没有那么大。

0 投票
4 回答
3278 浏览

cvs - "read lock failed" at cvs annotate

I am trying to use cvs annotate. This is the what I run:

However, I get the following error:

What does this mean? How can I overcome this problem? Could it be related to the ^M character I see at the error message?

When I use eclipse to do the annotation it works. I checked and the directory `/mycvs/cvsroot/projects/dg' exists. The error also occurs when I'm logged in as root, so probably it's not a permissions issue either.

I am using CentOS

0 投票
8 回答
12970 浏览

windows - 锁定执行文件:Windows 有,Linux 没有。为什么?

我注意到在 Windows 上执行文件(.exe 或 .dll)时,它被锁定并且无法删除、移动或修改。

另一方面,Linux 不会锁定正在执行的文件,您可以删除、移动或修改它们。

为什么 Windows 会锁定而 Linux 不锁定?锁定有优势吗?

0 投票
1 回答
1966 浏览

ajax - Ajax keep=alive 是个好主意吗?

我目前正在开发一个简单的 CRUD 应用程序。一项要求是防止用户同时编辑内容。为了做到这一点,我“锁定”记录以查看它们是否正在被编辑,以防止其他用户同时编辑。我在想实现这个的一个好方法可能是使用 AJAX 保持活动来查看用户会话是否已过期,如果是,则解锁记录以进行编辑。以前有人用过这种技术吗?如果工作站被锁定几分钟或没有,它会工作吗?

0 投票
2 回答
151 浏览

sql-server - SQL过程运行时间大相径庭

我有一个应用程序在 SQL Server 2000 上运行一个巨大的存储过程。通常需要大约 1 分钟才能完成,但有时会需要更长的时间。刚才我在我的测试系统中连续运行了 3 次。花了 1:12、1:23 和 55:25。什么会导致这种行为?数据库中还有其他事情发生,所以我想知道它是否与锁有关。我怎样才能在行动中抓住这一点?

0 投票
3 回答
3171 浏览

sql-server - 从 SQL Server 2000 到 DB2/AS400 的 OpenQuery 导致锁定

每天早上,我们都有一个进程在 AS400/iSeries/i6(无论 IBM 现在如何称呼它)上向 DB2 发出大量查询(约 10000 个),在过去的 2 个月中,操作员一直在抱怨我们的查询锁定了几个文件阻止他们完成夜间处理。查询非常简单,例如

我不是 iSeries 方面的专家,我想知道是否有人从 AS400/Db2 的角度对锁升级有任何见解。导致锁定的 ID 已确认是我们注册链接服务器的 ID,我们知道它最有可能是我们,因为 [Library] 和 [FileName] 与我们发出的查询一致。

这种情况最近才开始发生。是否有可能是我们的选择语句导致 AS400 升级锁?问题是它们在没有人工干预的情况下不会被释放。

0 投票
1 回答
554 浏览

database - 寻找关于分布式系统中记录锁定的建议

在记录锁定方面,我们正在尝试为我们的团队提供推荐的设计模式。典型的思想流派是这样的: 1. 用户从列表中选择一条记录 2. 用用户 ID 锁定记录 3. 加载锁定的记录记录(没有锁定,然后有人打败它)。

我是否遗漏了什么,或者这似乎是唯一的方法?((在我们的例子中,乐观锁定对于最终用户来说会很麻烦和困惑。编辑通常是相当大量的。))

0 投票
1 回答
595 浏览

java - 为什么 AbstractQueuedSynchronizer 在获取锁时会中断

我正在查看 java.uti.concurrent.locks.AbstractQueuedSynchronizer 的源代码,acquire() 方法看起来像这样 -

为什么它会中断调用acquire()的线程?如果在线程 run() 方法中的某处进行了检查,那么它可能会在调用 acquire() 之后通过,这可能是不可取的和没有想到的?

有人想弄清楚为什么上面的代码会这样做吗?

0 投票
1 回答
6886 浏览

windows - 是否有可能以编程方式找出哪个进程正在通过网络锁定文件

我在 Windows 2003 服务器上有一个文件,该文件被另一个 Windows 2003 服务器上运行的进程锁定。是否可以找出哪台机器上的哪个进程正在锁定该资源。我不介意我用哪种语言来做这件事。