问题标签 [thread-safety]

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 回答
164 浏览

thread-safety - 对象必须被锁定才能使用?

我在思考语言特性,我想知道以下特性是否已在任何语言中实现。

一种声明对象只能在 Mutex 中访问的方法。所以例如在java中你只能访问一个对象,如果它在一个同步块中并且在C#中是一个锁。

如果在 Mutex 块之外使用该对象,则会出现编译器错误。

有什么想法吗?

更新

我认为有些人误解了这个问题,我不是在问你是否可以锁定对象,我是在问是否有一种机制可以在声明对象时声明它只能从锁定/同步语句中访问。

0 投票
5 回答
5237 浏览

delphi - 具有“线程安全”读/写操作的 Delphi 数据类型列表?

'布尔'变量对于从任何线程读取和写入是线程安全的吗?我已经看到一些新闻组引用说它们是。是否有任何其他数据类型可用?(枚举类型,也许是短整数?)

最好有一个可以从任何线程安全读取的所有数据类型的列表,以及另一个可以在任何线程中安全写入的列表,而无需求助于各种同步方法。

0 投票
2 回答
2517 浏览

.net - .NET 字典:仅枚举线程安全吗?

简单地从多个线程中枚举一个 .NET 字典是否安全?

根本没有对字典进行任何修改。

0 投票
2 回答
390 浏览

.net - 这段代码是线程安全的吗?

我正在编写一些代码,其中 UI 线程需要与后台线程进行网络通信。代码有效,但它会被认为是线程安全的吗?

如果有经验的人能带领我走上正确的道路,我会感觉好多了……

这是 .NET C++ 代码... :)

0 投票
4 回答
10231 浏览

c# - 为什么像 BindingList 或 ObservableCollection 这样的类不是线程安全的?

一次又一次地,我发现自己不得不编写线程安全版本的 BindingList 和 ObservableCollection,因为当绑定到 UI 时,这些控件不能从多个线程中更改。我想了解的是为什么会这样——是设计错误还是故意的?

0 投票
2 回答
2047 浏览

asp.net - ASP.NET 和 System.Diagnostics 跟踪 - 我错过了什么,还是这是个坏主意?

出于各种常见原因,我想对我的 ASP.NET 应用程序使用跟踪。特别是因为我发现了使用服务跟踪查看器工具的可能性,它允许您以一种强大的方式检查您的跟踪。

由于我之前从未使用过这个trace的东西,所以我开始研究它。经过一段时间的 Google、SO 和 MSDN,我终于对事情的运作方式有了一个很好的了解。但我也发现了一件非常令人不安的事情。

在 ASP.NET 应用程序中使用跟踪时,通过 Web 请求将跟踪消息组合在一起非常有意义。特别是因为我想使用它的原因之一是研究性能问题。上述工具还通过<Corrleation>在生成的 XML 文件中使用标签来支持这一点。又是从哪来的System.Diagnostics.Trace.CorrelationManager。它还允许其他不错的功能,例如 Activity 启动/停止,它提供了更好的跟踪消息分组。很酷,对吧?

我也是这样,直到我开始检查CorrelationManager实际居住的地方。毕竟 - 这是一个静态属性。在玩了一些 Reflector 之后,我发现了一些可怕的东西 - 它存储在CallContext我们不应该在 ASP.NET 中使用哪种东西,对吗?

所以......我在这里错过了什么吗?ASP.NET 中的跟踪真的存在根本缺陷吗?

补充: Emm,我有点自己重写这些东西的边缘。我仍然想使用整洁的工具来探索痕迹。有什么理由我不应该这样做?也许还有更好的东西?如果我能尽快得到一些答案,那就太好了。:)

补充2:我的一位同事证实这不仅仅是一个理论问题。他在他正在研究的系统中观察到了这一点。这样就解决了。我将建立一个新的小系统,按照我想要的方式做事。:)

补充 3:哇,太棒了……微软的人找不到在 ASP.NET 中使用 Correlation Manager 有什么问题。所以显然我们毕竟没有修复这个错误......

0 投票
5 回答
2725 浏览

multithreading - 实现线程安全

问题如何确保我的应用程序是线程安全的?他们有什么常见的做法、测试方法、要避免的事情、要寻找的事情吗?

背景我目前正在开发一个服务器应用程序,它在不同的线程中执行许多后台任务,并使用 Indy 与客户端通信(使用另一组自动生成的线程进行通信)。由于应用程序应该是高度可用的,程序崩溃是一件非常糟糕的事情,我想确保应用程序是线程安全的。无论如何,我不时发现一段代码会引发以前从未发生过的异常,并且在大多数情况下,我意识到这是某种同步错误,我忘记正确同步我的对象。因此,我提出了关于最佳实践、线程安全测试等问题的问题。

mghie:谢谢你的回答!我也许应该更精确一点。为了清楚起见,我了解多线程的原理,我在整个程序中使用同步(监视器),并且我知道如何区分线程问题和其他实现问题。但是,尽管如此,我还是时不时忘记添加适当的同步。举个例子,我在代码中使用了 RTL 排序函数。看起来像

事实证明,我必须在排序时同步 FKeyList。最初编写那行简单的代码时,我并没有想到它。我想谈的就是这些。哪些地方容易忘记添加同步代码?您如何确保在所有重要位置添加了同步代码?

0 投票
2 回答
1639 浏览

ruby-on-rails - Ruby 类成员变量现在可以了吗?

去年五月在波特兰的 Railsconf 上,我参加了一个演讲,有人认为,在 Rails 中,Ruby 类成员变量,如 @@foo,是危险的,因为它们本质上是非线程安全的。

之后我研究了这个问题,但我从来没有找到一个真正充实这个问题的链接。我将不胜感激指向一篇关于 Rails 和线程的好文章,该文章真正涉及到类成员问题。另外,很高兴知道 Rail 2+ 和 Yarv 在这方面是如何改变的。

编辑:

也许我对演示文稿的记忆模糊不清,但我记得@@foo 的问题超出了通常的警告,即必须严格控制任何共享变量访问。我知道 Ruby 代码本身存在内存泄漏,不久前已修复。我正在寻找有关 Ruby 共享变量和多任务处理的文章链接,越深入越好。*目前我不使用类变量来做任何事情,但是在某些情况下能够使用它们会很好。

0 投票
5 回答
23142 浏览

c# - 将线程安全访问方法写入 Windows 窗体控件的最短方法

在本文中:

http://msdn.microsoft.com/en-us/library/ms171728(VS.80).aspx

作者使用以下方法对 Windows 窗体控件进行线程安全调用:

有没有更短的方法来完成同样的事情?

0 投票
6 回答
242 浏览

mysql - 使用表将上次使用的 ID 保存在 Web 服务器场中

我使用带有一行的表来保留最后使用的 ID(我有理由不使用 auto_increment),我的应用程序应该在服务器场中运行,所以我想知道如何更新最后插入的 ID(即递增它)和一步选择新 ID 以避免线程安全问题(服务器场中服务器之间的竞争条件)。