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

c# - C#中的重入锁

以下代码会导致在 .NET 上使用 C# 导致死锁吗?

0 投票
3 回答
3836 浏览

python - Python:在windows下锁定目录访问

我希望能够在 Windows 下锁定目录访问。以下代码对 POSIX 系统下的文件或目录非常有效:

但是我只找到了一种方法来对文件执行锁定访问,而不是使用以下代码对目录执行锁定访问:

您知道如何改进此代码并能够锁定目录访问吗?

伯特兰

0 投票
6 回答
7451 浏览

c# - 在多线程代码中读取 .NET Int32 时,我们需要锁定它吗?

我正在阅读以下文章: http: //msdn.microsoft.com/en-us/magazine/cc817398.aspx Joe Duffy 的“解决多线程代码中的 11 个可能问题”

它向我提出了一个问题:“在多线程代码中读取 .NET Int32 时,我们需要锁定它吗?”

我知道如果它是 32 位 SO 中的 Int64,它可能会撕裂,正如文章中所解释的那样。但是对于 Int32 我想象了以下情况:

我认为没有理由在 Read 方法中包含锁。你?

更新基于答案(由 Jon Skeet 和 ctacke 提供)我知道上面的代码仍然容易受到多处理器缓存的影响(每个处理器都有自己的缓存,与其他处理器不同步)。下面的所有三个修改都解决了这个问题:

  1. 在“int example”中添加“volatile”属性
  2. 插入一个 Thread.MemoryBarrier(); 在实际阅读“int example”之前
  3. 在“lock(thisLock)”中读取“int example”

而且我也认为“volatile”是最优雅的解决方案。

0 投票
3 回答
6848 浏览

c# - ReaderWriterLockSlim 与监视器

我有一个IDictionary<TKey,TValue>内部保存 n other 的实现,Dictionary<TKey, TValue>并通过键的 HashCode 将插入分发到各个子字典。有 16 个子字典,在 4 核机器上的冲突数量非常低。

对于并行插入,我用 a 锁定了 Add-method ReaderWriterLockSlim,只锁定了单个子字典:

当插入具有四个线程的项目时,我只有大约 32% 的 cpu 使用率和糟糕的性能。所以我用监视器(即lock关键字)替换了 ReaderWriterLockSlim。CPU 使用率现在接近 100%,性能提高了一倍以上。

我的问题是:为什么 CPU 使用率会增加?碰撞次数不应改变。是什么让 ReaderWriterLock.EnterWriteLock 等了这么多次?

0 投票
2 回答
7377 浏览

c# - 你能锁定一个通用字典吗?

或者你应该总是创建一些其他的锁对象?

0 投票
4 回答
5677 浏览

c# - 如何正确锁定值类型?

我正在阅读有关线程和锁定的信息。通常的做法是您不能(也不应该)锁定值类型。

所以问题是,锁定值类型的推荐方法是什么?我知道有几种方法可以做一件事,但我还没有看到一个例子。虽然 MSDN 论坛上有一个很好的帖子,但我现在似乎找不到。

谢谢

0 投票
3 回答
442 浏览

sql-server-2008 - 为 Web 应用程序调整 SQL Server 2008

在其中一个 Stackoverflow 播客中,我记得 Jeff Atwood 说过 SQL Server 2008 中有一个配置选项可以减少锁定,并且是在所有查询中使用“with (nolock)”的一种替代方法。有谁知道如何启用他所说的功能,甚至可能是 Jeff 本人。我正在考虑部署 SQL Server 2008,并想看看使用这样的功能是否有助于我的 Web 应用程序。

0 投票
4 回答
7642 浏览

c# - ASP.NET 应用程序中的文件锁定(读/写)

我有两个 ASP.NET Web 应用程序。一个负责处理一些信息并写入日志文件,另一个应用程序负责读取日志文件并根据用户请求显示信息。

这是我的 Writer 代码

这是我的阅读器代码:

我的问题是,上面的代码是否足以防止锁定在网络花园环境中?

编辑1:脏读没关系。 编辑 2:使用 new Mutex(false, "LogFileMutex") 创建 Mutex,关闭 StreamWriter

0 投票
4 回答
5950 浏览

c# - C# 并发、锁定和字典对象

我有一堆加载到数据库对象中的数据库实体。同一个 DB 实体可能被加载到多个 DB 对象中。数据库实体会定期需要特殊处理。该处理必须由一个线程一次执行。锁定在这里是有序的。

编辑:重要提示:该过程调用慢速网络服务。这就是我试图防止并发的原因。我不明白如何在没有锁的情况下安全地完成这项工作。

因此,我创建了一个“挂锁”对象,数据库对象将引用该对象进行锁定。挂锁对象是基于实体的,因此同一实体的两个或多个 DB 对象将使用相同的挂锁对象。我使用数据库实体的 ID 作为键将这些挂锁存储在字典对象中。挂锁对象也只是一个简单的字符串对象。这是正确的方法吗?我在想我要么过度工程化,要么简化了这个。如果方法是正确的,这段代码看起来如何?它可以工作,但我还没有在负载下测试它。

谢谢 :)

0 投票
2 回答
1724 浏览

sql-server-2005 - SQL 2005:NOLOCK 提示显着增加了读取。怎么回事?

我有一个存储过程,当 NOLOCK 提示添加到查询时,它会执行更多读取操作。我很困惑 - 请问有人知道为什么吗?

详细信息:查询是:

它进行了 40,000 次读取,但行数不到 2,000 行。我确定大多数这些读取是由 3 个 TEXT 列引起的。(如果我省略了这些,它会下降到 59 次读取!)但是当我删除 WITH (NOLOCK) 时,它会从 40,000 次读取到 13,000 次。我重复了几次,因为我认为我一定搞砸了,但这两种方式都非常一致。