问题标签 [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# - 易失性与互锁性与锁定性
假设一个类有一个public int counter
由多个线程访问的字段。这int
只是增加或减少。
要增加这个字段,应该使用哪种方法,为什么?
lock(this.locker) this.counter++;
,Interlocked.Increment(ref this.counter);
,- 将访问修饰符更改为
counter
topublic volatile
。
现在我发现了volatile
,我一直在删除许多lock
语句和Interlocked
. 但是有理由不这样做吗?
c# - 另一个锁定问题
我试图锁定我的多线程理解。我正在尽我所能自学,但其中一些问题需要澄清。
我用一段代码经历了三次迭代,尝试锁定。
在这段代码中,唯一需要锁定的是 this.managerThreadPriority。
首先,简单、程序化的方法,带有简约的锁定。
接下来,使用单个语句创建和启动一个新线程,但锁的范围似乎太大,无法包括线程的创建和启动。编译器并不神奇地知道在 this.managerThreadPriority 使用后可以释放锁。
我认为应该避免这种幼稚的锁定。
最后,创建和启动新线程的单个语句,仅在共享字段周围使用“嵌入式”锁。
想评论锁定语句的范围?例如,如果我需要在if
语句中使用一个字段并且该字段需要被锁定,我应该避免锁定整个if
语句吗?例如
比。
caching - 如何在 ColdFusion 中正确实现共享缓存?
我已经构建了一个 CFC,旨在用作一个动态的、老化的缓存,用于几乎所有值得缓存的东西。LDAP 查询、函数结果、数组、对象,应有尽有。任何需要时间或资源来计算并且需要不止一次的东西。我希望能够做一些事情:
- 在应用程序之间共享 CFC
- 定义缓存的范围(仅限服务器/应用程序/会话/当前请求)
- 在同一个请求中同时使用不同的缓存实例
- 使用缓存组件独立于 CFC
- 一般遵守常识(解耦、封装、正交性、锁定)
我当然会为每个不同的任务使用不同的缓存实例,但我希望能够跨应用程序使用相同的 CFC。缓存本身(还有什么)是缓存实例私有的结构。当范围本身可能发生变化时,我将如何正确实现缓存和锁定?
对于锁定,我目前使用命名锁('CacheRead'
, 'CacheWrite'
),这是安全的,但让我觉得很奇怪。为什么我想要一个服务器范围的锁,比如说,一个仅限会话的操作?(是的,也许这是学术性的,但无论如何。)
当我想要应用程序级缓存时,将 APPLICATION 范围作为参考传递似乎也是错误的做法。有没有更好的办法?
java - 双重检查锁定文章
我正在阅读这篇关于“双重检查锁定”的文章,并且在文章的主题之外,我想知道为什么在文章的某些地方作者使用了下一个成语:
清单 7. 尝试解决乱序写入问题
我的问题是:有什么理由用同一个锁同步两次代码吗?这有什么目的吗?
提前谢谢了。
c# - 在字典的键上使用锁定
我有一个Dictionary<string, someobject>
.
编辑:有人向我指出,我的例子很糟糕。我的整个意图不是更新循环中的引用,而是根据不同的线程更新不同的值需要更新/获取数据。我将循环更改为方法。
我需要更新字典中的项目 - 一次一个键,我想知道在我的 Dictionary 对象的 .key 值上使用锁定是否有任何问题?
这会在法庭上成立还是失败?我只希望字典中的每个值都被独立锁定,因此锁定(和更新)一个值不会锁定其他值。另外我知道锁定将持续很长时间 - 但数据在完全更新之前将无效。
.net - 我什么时候会使用 AutoResetEvent 和 ManualResetEvent 而不是 Monitor.Wait()/Monitor.Pulse()?
他们似乎都实现了相同的目的。我什么时候会选择其中之一?
database - 我实现记录锁定的最佳方式是什么?
我有一个关于锁定的问题。这不仅仅与记录锁定有关,但无论如何。
假设我正在编写一个可访问网络的 CMS。我正在为一些想法而苦苦挣扎。
当用户打开文章进行编辑时,我可以将文章标记为“正在使用”。到目前为止,一切都很好。
但是我什么时候删除标志?用户何时保存文章?但是如果用户不想再打字并决定关闭浏览器并上床睡觉怎么办?
想到了一个超时机制,但是写一篇文章需要多长时间?10分钟太短,30分钟太长。。
也许我过于复杂了。我想听听你对这个问题的看法。
c++ - 如何在 C++ 中使用任意字符串作为锁?
假设我有一个多线程 C++ 程序,它以函数调用的形式处理请求handleRequest(string key)
。每次调用都handleRequest
发生在一个单独的线程中,并且有任意大量的可能值key
。
我想要以下行为:
- 当对 的同时调用
handleRequest(key)
具有相同的值时,它们将被序列化key
。 - 全局序列化被最小化。
的主体handleRequest
可能如下所示:
问题:我将如何实现KeyLock
以获得所需的行为?
一个天真的实现可能会像这样开始:
...但这需要在每个请求的开始和结束时使用全局锁,并为每个请求创建一个单独的Lock
对象。如果对 的调用之间的争用很高handleRequest
,那可能不是问题,但如果争用很低,它可能会带来很多开销。
concurrency - 应用程序对象和并发问题
在一些像这样的asp 教程中,我观察到以下模式:
应用程序锁
'对应用程序对象做一些事情
应用程序.解锁
但是,由于网页可以有多个实例,因此存在明显的并发问题。所以我的问题如下:
如果一个页面在对象已经被锁定时试图锁定怎么办?
有没有办法检测应用程序对象是否被锁定?
只在未锁定的应用程序对象上工作会更好还是会产生其他后果?
如果只有一个动作涉及应用程序对象怎么办?〜在这种情况下有理由锁定/解锁吗?
c# - 使 MTA 中的锁定更容易
在多线程代码中,当一个实例可能被多个线程读取或写入时,它们需要被锁定以安全地执行这些操作。
为了避免重复创建要锁定的对象并通过代码编写一堆锁定语句,我创建了一个通用类来处理锁定。
从概念上讲,我错过了什么吗?这应该有效,对吧?
还有一个在类中使用它的例子:
另外,我将如何以自动化的方式测试这样的东西(例如创建一个单元测试)?
最后,我可以做些什么来实现 ++ 和 -- 运算符,以避免这种情况: