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

c# - 在 C# 下,在 32 位处理器上使用 Int64 是危险的

我在 MS 文档中读到,在 32 位 Intel 计算机上分配 64 位值不是原子操作;也就是说,该操作不是线程安全的。这意味着如果两个人同时为一个静态Int64字段赋值,则无法预测该字段的最终值。

三部分问题:

  • 这是真的吗?
  • 这是我在现实世界中会担心的事情吗?
  • 如果我的应用程序是多线程的,我真的需要Int64用锁定代码包围我的所有任务吗?
0 投票
8 回答
3497 浏览

thread-safety - 线程安全的统一随机数生成器

我有一些并行的 Fortran90 代码,其中每个线程都需要生成相同的随机数序列。

我有一个似乎是线程不安全的随机数生成器,因为对于给定的种子,我完全无法在每次运行程序时重复相同的结果。

我(几乎)浏览了整个网络以寻找线程安全 RNG 的一些代码,但没有成功。任何人都可以向我提供(链接到)一个代码吗?

提前致谢!

0 投票
16 回答
811535 浏览

c# - 收藏已修改;枚举操作可能无法执行

我无法深入了解这个错误,因为在附加调试器时,它似乎没有发生。

收藏已修改;枚举操作可能无法执行

下面是代码。

这是 Windows 服务中的 WCF 服务器。只要有数据事件,服务就会调用该方法NotifySubscribers()(以随机间隔,但不是很频繁 - 每天大约 800 次)。

当 Windows 窗体客户端订阅时,订阅者 ID 会添加到订阅者字典中,当客户端取消订阅时,它会从字典中删除。当(或之后)客户端取消订阅时,会发生错误。似乎下次NotifySubscribers()调用该方法时,foreach()循环失败,主题行出现错误。该方法将错误写入应用程序日志,如下面的代码所示。当附加调试器并且客户端取消订阅时,代码执行良好。

你看到这段代码有问题吗?我需要使字典线程安全吗?

0 投票
4 回答
9690 浏览

c++ - 在 C++ 中缓存昂贵的数据 - 函数范围的静态变量与可变成员变量

我有一个相对昂贵的数据获取操作,我想缓存它的结果。这个操作是从const方法中调用的,大致是这样的:

我想AdjustData留下来const,但我想缓存这个因素,所以我只在第一次获取它。目前我正在使用 amutable map<int, double>来存储结果(地图是 from keyto factor),但我认为使用函数范围的静态可能是一个更好的解决方案 - 这个因素只需要这个函数,并且与其余的班级。

这似乎是一个好方法吗?有没有更好的选择?我可能会想到什么,特别是在线程安全方面。

谢谢,

多姆

0 投票
3 回答
934 浏览

thread-safety - PRNG 需要是线程安全的吗?

只要并发调用不会导致 seg-v 或返回相同的值,当这些错误的主要影响是不可预测的结果并且这就是 PRNG 的重点时,有什么理由可以防止PRNG中的竞争条件和数据损坏?


编辑:是否有任何 PRNG 在竞争条件和数据损坏下​​不会受到影响?

0 投票
5 回答
43549 浏览

java - HttpSession 线程安全吗,设置/获取属性线程安全操作吗?

此外,正在设置的对象是否必须是线程安全的,以保证我们知道存储在会话中的对象的状态是什么。

另外,我在网上阅读了一些建议使用的内容:

这是一个有效的建议吗?

0 投票
3 回答
20134 浏览

asp.net - 带会话的 NHibernate 线程安全

我已经使用 NHibernate 一段时间了,并且不时发现如果我尝试同时请求两个页面(或尽可能接近),它偶尔会出错。所以我认为这是因为我的会话管理不是线程安全的。

我以为这是我的课,所以我尝试使用与这篇博文不同的方法http://pwigle.wordpress.com/2008/11/21/nhibernate-session-handling-in-aspnet-the-easy-way/但是我仍然遇到同样的问题。我得到的实际错误是:

要么打开要么没有打开数据读取器,但这是罪魁祸首。

我把我的会话管理课程放在下面,有人能发现我为什么会遇到这些问题吗?

我正在使用的实际商店是这样的:

我在 Application_Start 上初始化 SessionFactory:

更新

谢谢你的建议。我尝试了一些不同的方法来尝试简化代码,但我仍然遇到相同的问题,我可能知道原因。

我在需要时为每个请求创建会话,但在我的 global.asax 中,我正在处理 Application_EndRequest 上的会话。但是,当我在加载页面结束时进行调试时,我发现 Application_EndRequest 被多次触发。我认为该事件只假设在请求结束时触发一次,但如果不是,并且其他一些项目正在尝试使用 Session (这是错误所抱怨的),无论出于什么奇怪的原因可能是我的问题,会话仍然是线程安全的,它只是被提前处理掉了。

有人有什么想法吗?我做了一个谷歌,看到 VS 开发服务器确实会导致这样的问题,但我是通过 IIS 运行它。

0 投票
5 回答
18761 浏览

java - Java StringBuilder 和线程安全

我正在构建一个由多个部分组成的字符串,并且想要使用其中一个StringBufferStringBuilder这样做。从 Java 5 文档中,我认为这StringBuilder是最好的,但需要注意的是

的实例StringBuilder对于多线程使用是不安全的。

从这个陈述中,我明白我不应该有一个StringBuilder由多个线程共享的实例。但是这个案例呢:

在这里,函数中可能同时有多个线程,同时使用StringBuilder该类(例如,静态变量的并发访问,如果有的话),但每个线程都有自己单独的StringBuilder. 从文档中,我不能完全确定这是否算作多线程使用。

0 投票
1 回答
212 浏览

thread-safety - 编写调用 sybase 的 nsapi 插件的建议,该插件必须是线程安全的

我正在努力寻找 sybase 文档,说明 12.5 客户端是否是线程安全的。我需要进行 sybase 线程安全调用,因为我正在编写一个存在于线程环境中的 nsapi 插件。因此,要么我需要确保 sybase 客户端可以在线程环境中运行,要么我需要序列化对 sybase 的调用,这会降低我的网络服务器的速度。建议?

0 投票
6 回答
1926 浏览

c# - C#关于线程安全的问题

我正在使用线程池进行一些繁重的处理以及一些 sql。目前,我在需要时打开 sql 连接,运行查询然后关闭它们。这工作正常。该应用程序一直在运行,没有任何问题。随着此应用程序正在完成更多工作,它正在使用更多线程。更多线程意味着更多打开/关闭 SQL 连接。在 SQL 2005 中,这实际上会影响服务器。我的测试服务器每秒处理大约 175 个事务。其中大约 150 个正在主数据库中运行,并且是“ValidateSQLLogin”。

我将更改应用程序,以便每个线程都有自己的连接,然后这个连接在线程周围传递。

所以我的问题是:

如果 SQL 连接对象是在线程中本地创建的,然后通过 ref 传递给另一个类的静态函数,这会不安全吗?

我最初的想法是这将是不安全的,因为 10 个线程可以同时调用同一个静态函数,每个线程都传递自己的连接对象。

以前,静态函数会打开自己的连接,并在完成后关闭它们。

如果不安全,那么解决此问题的最佳方法是什么。我需要尝试最小化 Sql 连接的打开/关闭。

谢谢

加雷斯