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

c# - 易失性与互锁性与锁定性

假设一个类有一个public int counter由多个线程访问的字段。这int只是增加或减少。

要增加这个字段,应该使用哪种方法,为什么?

  • lock(this.locker) this.counter++;,
  • Interlocked.Increment(ref this.counter);,
  • 将访问修饰符更改为counterto public volatile

现在我发现了volatile,我一直在删除许多lock语句和Interlocked. 但是有理由不这样做吗?

0 投票
3 回答
265 浏览

c# - 另一个锁定问题

我试图锁定我的多线程理解。我正在尽我所能自学,但其中一些问题需要澄清。

我用一段代码经历了三次迭代,尝试锁定。

在这段代码中,唯一需要锁定的是 this.managerThreadPriority。

首先,简单、程序化的方法,带有简约的锁定。

接下来,使用单个语句创建和启动一个新线程,但锁的范围似乎太大,无法包括线程的创建和启动。编译器并不神奇地知道在 this.managerThreadPriority 使用后可以释放锁。

我认为应该避免这种幼稚的锁定。

最后,创建和启动新线程的单个语句,仅在共享字段周围使用“嵌入式”锁。

想评论锁定语句的范围?例如,如果我需要在if语句中使用一个字段并且该字段需要被锁定,我应该避免锁定整个if语句吗?例如

比。

0 投票
2 回答
695 浏览

caching - 如何在 ColdFusion 中正确实现共享缓存?

我已经构建了一个 CFC,旨在用作一个动态的、老化的缓存,用于几乎所有值得缓存的东西。LDAP 查询、函数结果、数组、对象,应有尽有。任何需要时间或资源来计算并且需要不止一次的东西。我希望能够做一些事情:

  • 在应用程序之间共享 CFC
  • 定义缓存的范围(仅限服务器/应用程序/会话/当前请求)
  • 在同一个请求中同时使用不同的缓存实例
  • 使用缓存组件独立于 CFC
  • 一般遵守常识(解耦、封装、正交性、锁定)

我当然会为每个不同的任务使用不同的缓存实例,但我希望能够跨应用程序使用相同的 CFC。缓存本身(还有什么)是缓存实例私有的结构。当范围本身可能发生变化时,我将如何正确实现缓存和锁定?

对于锁定,我目前使用命名锁('CacheRead', 'CacheWrite'),这是安全的,但让我觉得很奇怪。为什么我想要一个服务器范围的锁,比如说,一个仅限会话的操作?(是的,也许这学术性的,但无论如何。)

当我想要应用程序级缓存时,将 APPLICATION 范围作为参考传递似乎也是错误的做法。有没有更好的办法?

0 投票
10 回答
2030 浏览

java - 双重检查锁定文章

我正在阅读这篇关于“双重检查锁定”的文章,并且在文章的主题之外,我想知道为什么在文章的某些地方作者使用了下一个成语:

清单 7. 尝试解决乱序写入问题

我的问题是:有什么理由用同一个锁同步两次代码吗?这有什么目的吗?

提前谢谢了。

0 投票
7 回答
18751 浏览

c# - 在字典的键上使用锁定

我有一个Dictionary<string, someobject>.

编辑:有人向我指出,我的例子很糟糕。我的整个意图不是更新循环中的引用,而是根据不同的线程更新不同的值需要更新/获取数据。我将循环更改为方法。

我需要更新字典中的项目 - 一次一个键,我想知道在我的 Dictionary 对象的 .key 值上使用锁定是否有任何问题?

这会在法庭上成立还是失败?我只希望字典中的每个值都被独立锁定,因此锁定(和更新)一个值不会锁定其他值。另外我知道锁定将持续很长时间 - 但数据在完全更新之前将无效。

0 投票
4 回答
11099 浏览

.net - 我什么时候会使用 AutoResetEvent 和 ManualResetEvent 而不是 Monitor.Wait()/Monitor.Pulse()?

他们似乎都实现了相同的目的。我什么时候会选择其中之一?

0 投票
3 回答
987 浏览

database - 我实现记录锁定的最佳方式是什么?

我有一个关于锁定的问题。这不仅仅与记录锁定有关,但无论如何。

假设我正在编写一个可访问网络的 CMS。我正在为一些想法而苦苦挣扎。

当用户打开文章进行编辑时,我可以将文章标记为“正在使用”。到目前为止,一切都很好。

但是我什么时候删除标志?用户何时保存文章?但是如果用户不想再打字并决定关闭浏览器并上床睡觉怎么办?

想到了一个超时机制,但是写一篇文章需要多长时间?10分钟太短,30分钟太长。。

也许我过于复杂了。我想听听你对这个问题的看法。

0 投票
6 回答
1943 浏览

c++ - 如何在 C++ 中使用任意字符串作为锁?

假设我有一个多线程 C++ 程序,它以函数调用的形式处理请求handleRequest(string key)。每次调用都handleRequest发生在一个单独的线程中,并且有任意大量的可能值key

我想要以下行为:

  • 当对 的同时调用handleRequest(key)具有相同的值时,它们将被序列化key
  • 全局序列化被最小化。

的主体handleRequest可能如下所示:

问题:我将如何实现KeyLock以获得所需的行为?

一个天真的实现可能会像这样开始:

...但这需要在每个请求的开始和结束时使用全局锁,并为每个请求创建一个单独的Lock对象。如果对 的调用之间的争用很高handleRequest,那可能不是问题,但如果争用很低,它可能会带来很多开销。

0 投票
3 回答
642 浏览

concurrency - 应用程序对象和并发问题

在一些像这样的asp 教程中,我观察到以下模式:

应用程序锁

'对应用程序对象做一些事情

应用程序.解锁

但是,由于网页可以有多个实例,因此存在明显的并发问题。所以我的问题如下:

如果一个页面在对象已经被锁定时试图锁定怎么办?

有没有办法检测应用程序对象是否被锁定?

只在未锁定的应用程序对象上工作会更好还是会产生其他后果?

如果只有一个动作涉及应用程序对象怎么办?〜在这种情况下有理由锁定/解锁吗?

0 投票
2 回答
153 浏览

c# - 使 MTA 中的锁定更容易

在多线程代码中,当一个实例可能被多个线程读取或写入时,它们需要被锁定以安全地执行这些操作。

为了避免重复创建要锁定的对象并通过代码编写一堆锁定语句,我创建了一个通用类来处理锁定。

从概念上讲,我错过了什么吗?这应该有效,对吧?

还有一个在类中使用它的例子:

另外,我将如何以自动化的方式测试这样的东西(例如创建一个单元测试)?

最后,我可以做些什么来实现 ++ 和 -- 运算符,以避免这种情况: