问题标签 [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.
c# - C#中的重入锁
以下代码会导致在 .NET 上使用 C# 导致死锁吗?
python - Python:在windows下锁定目录访问
我希望能够在 Windows 下锁定目录访问。以下代码对 POSIX 系统下的文件或目录非常有效:
但是我只找到了一种方法来对文件执行锁定访问,而不是使用以下代码对目录执行锁定访问:
您知道如何改进此代码并能够锁定目录访问吗?
伯特兰
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 提供)我知道上面的代码仍然容易受到多处理器缓存的影响(每个处理器都有自己的缓存,与其他处理器不同步)。下面的所有三个修改都解决了这个问题:
- 在“int example”中添加“volatile”属性
- 插入一个 Thread.MemoryBarrier(); 在实际阅读“int example”之前
- 在“lock(thisLock)”中读取“int example”
而且我也认为“volatile”是最优雅的解决方案。
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 等了这么多次?
c# - 你能锁定一个通用字典吗?
或者你应该总是创建一些其他的锁对象?
c# - 如何正确锁定值类型?
我正在阅读有关线程和锁定的信息。通常的做法是您不能(也不应该)锁定值类型。
所以问题是,锁定值类型的推荐方法是什么?我知道有几种方法可以做一件事,但我还没有看到一个例子。虽然 MSDN 论坛上有一个很好的帖子,但我现在似乎找不到。
谢谢
sql-server-2008 - 为 Web 应用程序调整 SQL Server 2008
在其中一个 Stackoverflow 播客中,我记得 Jeff Atwood 说过 SQL Server 2008 中有一个配置选项可以减少锁定,并且是在所有查询中使用“with (nolock)”的一种替代方法。有谁知道如何启用他所说的功能,甚至可能是 Jeff 本人。我正在考虑部署 SQL Server 2008,并想看看使用这样的功能是否有助于我的 Web 应用程序。
c# - ASP.NET 应用程序中的文件锁定(读/写)
我有两个 ASP.NET Web 应用程序。一个负责处理一些信息并写入日志文件,另一个应用程序负责读取日志文件并根据用户请求显示信息。
这是我的 Writer 代码
这是我的阅读器代码:
我的问题是,上面的代码是否足以防止锁定在网络花园环境中?
编辑1:脏读没关系。 编辑 2:使用 new Mutex(false, "LogFileMutex") 创建 Mutex,关闭 StreamWriter
c# - C# 并发、锁定和字典对象
我有一堆加载到数据库对象中的数据库实体。同一个 DB 实体可能被加载到多个 DB 对象中。数据库实体会定期需要特殊处理。该处理必须由一个线程一次执行。锁定在这里是有序的。
编辑:重要提示:该过程调用慢速网络服务。这就是我试图防止并发的原因。我不明白如何在没有锁的情况下安全地完成这项工作。
因此,我创建了一个“挂锁”对象,数据库对象将引用该对象进行锁定。挂锁对象是基于实体的,因此同一实体的两个或多个 DB 对象将使用相同的挂锁对象。我使用数据库实体的 ID 作为键将这些挂锁存储在字典对象中。挂锁对象也只是一个简单的字符串对象。这是正确的方法吗?我在想我要么过度工程化,要么简化了这个。如果方法是正确的,这段代码看起来如何?它可以工作,但我还没有在负载下测试它。
谢谢 :)
sql-server-2005 - SQL 2005:NOLOCK 提示显着增加了读取。怎么回事?
我有一个存储过程,当 NOLOCK 提示添加到查询时,它会执行更多读取操作。我很困惑 - 请问有人知道为什么吗?
详细信息:查询是:
它进行了 40,000 次读取,但行数不到 2,000 行。我确定大多数这些读取是由 3 个 TEXT 列引起的。(如果我省略了这些,它会下降到 59 次读取!)但是当我删除 WITH (NOLOCK) 时,它会从 40,000 次读取到 13,000 次。我重复了几次,因为我认为我一定搞砸了,但这两种方式都非常一致。