问题标签 [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.
.net - .NET 2.0 是否有纤薄的读写器锁?
我查看了 .NET 2.0 中的 ReaderWriterLock 和 .NET 3.5 中的 ReaderWriterLockSlim,而超薄版本不使用内核对象进行锁定。对于我的上下文,它可能会生成大量(但不是大量)对象,这听起来更好。
但是我编写的代码在过渡期间需要在 .NET 2.0 和 3.5 中使用,所以 3.5 版本虽然看起来很适合我的目的,但不能使用。
有没有人拥有或知道一个类似的类,我可以将其插入 .NET 2.0 并获得一些相同的好处?
sql-server - 事务级别、nolock/readpast 和并发
我们有一个系统,从多个站点同时插入大量数据,同时还暴露了一个数据查询接口。架构看起来像这样(抱歉格式不好):
数据插入是在“同步”中完成的,就像这样(我们只将数据插入系统,我们从不更新)
查询是这样的(对于给定的站点,测量时间和数据类型)
我的问题是我们如何结合插入的事务级别和查询的 NOLOCK/READPAST 提示,以便:
- 我们在支持插入的同时最大化系统中的并发性(我们需要存储大量数据,每秒高达 2000 多条记录)
- 查询仅从“已提交”同步返回数据(我们不希望结果集包含半插入同步或由于锁跳过而包含一些跳过条目的同步)
- 我们不关心查询中是否包含“最新”数据,我们更关心一致性和响应能力,而不是“实时”和最新数据
这可能是非常矛盾的目标,并且可能需要高事务隔离级别,但我对所有技巧和优化感兴趣,以实现对插入和选择的高响应性。如果需要更多细节来消除更多调整和技巧,我将很乐意详细说明。
更新:只需为将来的回复添加更多信息。我们在最初具有 5+ TB 存储的 SAN 网络上运行 SQL Server 2005(可能在 6 个月内 2008)。我不确定 SAn 设置了哪种 RAID,以及我们有多少磁盘可用。
sqlite - SQLite 非独占保留锁?
我一直在研究提高我网站的 SQLite 性能,尤其是在事务方面。本质上,我正在寻找一种在进程中延迟数据库写入的方法,以便它们可以一次完成。但是,当我累积更新查询时,我希望其他进程能够读取和写入数据库,并且只有在进程中发出提交时才锁定文件以进行写入。
在查看文档时,似乎一旦在事务中发出更新命令,进程就会获得一个保留锁,这(如果我没记错的话)意味着任何其他尝试将更新查询添加到自己的事务的进程或者提交事务是无法这样做的,因此会阻塞,直到事务提交到带有锁的进程上。
我确信针对此特定功能有很好的数据完整性原因。我只能说,在我的情况下,同时执行这些更新没有危险。
一种解决方案是,在每个过程中,我可以在数组中累积我希望调用的查询文本,然后在我准备好编写时循环它,但我想知道是否有可能进行 SQLite 事务自动为我执行此操作。
更新:当我说“一次完成所有更新”时,我的意思是在 SQLite 中使用事务来仅获得一个独占锁并在每个进程中写入一次磁盘,而不是每个查询一次。这导致使用 SQLite 的速度提高 100 倍。
我已经进行了一些基本测试,似乎一旦您有多个进程向其事务添加查询,一旦您点击更新查询,该进程就会尝试获取 RESERVED 锁。由于只有一个进程可以拥有保留锁,这意味着任何其他尝试获取锁的进程都将阻塞,直到拥有锁的进程完成事务。
我承认这个问题可能是一个过早的优化,因为我还没有遇到任何性能损失,但是我已经运行了一些简单的测试,并且 100 个用户在我的机器上创建和运行一个包含 100 个查询的事务大约需要 4 秒。
coldfusion - 何时应该在 ColdFusion 中使用范围锁定(应用程序、服务器等)与命名锁定?
什么时候适合使用 <cflock scope="application"> 或类似的,而不是 <cflock name="foo">?
具体来说,我有兴趣使用 CFLock 保护应用程序、会话或服务器范围内的共享对象,但我也有兴趣了解 ColdFusion 中锁定的不同用途。
sql - 将数据库表用作作业队列(又名批处理队列或消息队列)的最佳方式
我有一个包含约 50K 行的数据库表,每行代表一项需要完成的工作。我有一个程序从数据库中提取工作,完成工作并将结果放回数据库。(这个系统现在正在运行)
现在我想允许一个以上的处理任务来完成工作,但要确保没有任务被完成两次(作为性能问题而不是这会导致其他问题)。因为访问是通过存储过程进行的,所以我目前的做法是用看起来像这样的东西替换所述存储过程
顺便提一句; 工人的任务可能会在获得工作和提交结果之间失去联系。此外,除非我把那部分搞砸(每分钟约 5 个工作),否则我不认为数据库会接近瓶颈
这有什么问题吗?有一个更好的方法吗?
注意:“数据库作为 IPC 反模式”在这里只是稍微恰当,因为
- 我没有做 IPC(没有生成行的进程,它们现在都已经存在)和
- 针对该反模式描述的主要抱怨是,当进程等待消息时,它会导致数据库上出现不必要的负载(在我的情况下,如果没有消息,一切都可以在完成后关闭)
windows - 重新分配/覆盖热键 (Win + L) 以锁定窗口
Win是否可以将+热键重新分配L给另一个可执行文件/快捷方式?
用例 - 我想在笔记本电脑显示器锁定后立即关闭它。我知道可以锁定和关闭显示器的可执行文件,但我不想更改系统锁定的方式(通过显式运行程序或通过其他快捷方式)。如果Win+L可以分配给这个可执行文件,那将是最好的。
c# - C# 中各种线程同步选项有什么区别?
有人可以解释以下之间的区别:
- 锁定(某个对象){}
- 使用互斥锁
- 使用信号量
- 使用监视器
- 使用其他 .Net 同步类
我就是想不通。在我看来,前两个是一样的?
c# - SignalAndWait 用于锁定上下文
我有一个为线程池生成任务的管理器类,每个线程都应该在完成后进行回调。
我使用锁来处理变量和字段,并使用信号来处理线程间通信。我正在寻找的是一种退出当前 lock() 并以原子方式等待信号的方法,例如 SignalAndWait,但对于 locks()。
代码看起来像这样:
这里的问题是 .WaitOne() 不会退出 lock(),因此任何执行回调的线程都会死锁。
我对 WaitOne(Int32, bool exitContext) 寄予厚望,但该上下文似乎是关于远程处理和其他东西,而不是同步。
coldfusion - 何时在应用程序范围内使用锁定
我想知道是否需要锁定在应用程序范围内创建的一些代码。如果我在应用程序范围内创建一个对象说 userDAO.cfc,那么它可用于所有页面。然后,如果我在该对象中有一个方法说 getUserInfo(userID) 将在应用程序的不同部分调用,我是否需要锁定此方法?
java - 使用双重检查习语重置延迟加载的字段
考虑“实例字段延迟初始化的双重检查习惯用法”:
/blockquote>我希望能够以安全的方式重置该字段(在我的情况下,强制它从数据库中再次加载)。我假设我们可以通过使用重置方法来做到这一点:
/blockquote>这是重置字段的标准方法吗?安全吗?有什么陷阱吗?我之所以问,是因为 Bloch 就双重检查延迟加载给出了以下警告:“这个习语非常快,但也很复杂和微妙,所以不要试图以任何方式修改它。只需复制和粘贴——通常不是一个好主意,但在这里很合适。”
提前感谢来自喜马拉雅山的普拉亚。