asp.net - 我应该关心 ASP .NET 中静态 int (4 字节)变量的线程安全吗

标签 asp.net thread-safety

我觉得我不应该关心线程安全访问/写入

public static int MyVar = 12;

在 ASP .NET 中。

我从各个用户线程读取/写入该变量。我们假设这个变量将存储某个按钮/链接的点击次数。

我的理论是没有线程可以同时读取/写入该变量。它只是一个简单的 4 字节变量。

我确实关心线程安全,但仅适用于引用对象和 List 实例或其他需要更多周期来读取/更新的类型。

我的推测错了?

编辑

我理解这取决于我的情况,但这不是问题的重点。问题是:可以在不使用 lock 关键字的情况下使用(静态 int)变量编写线程安全代码吗?

编写正确的代码是我的问题。答案似乎是:是的,如果您编写正确且简单的代码,并且不太复杂,则可以创建线程安全函数,而不需要 lock 关键字。

最佳答案

如果一个线程只是设置该值,而另一个线程读取该值,则不需要锁;读取和写入是原子的。但是,如果多个线程可能正在更新它并且也在读取它来进行更新(例如增量),那么您肯定需要某种同步。如果只有一个线程要更新它,即使是增量,那么我认为不需要同步。

编辑(三年后)还可能需要添加 volatile关键字添加到声明中,以确保读取值时始终获得最新值(假设这在应用程序中很重要)。

关于asp.net - 我应该关心 ASP .NET 中静态 int (4 字节)变量的线程安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964253/

相关文章:

asp.net - asp.net 应用程序的脚本引擎

ASP.NET Core Azure 应用服务 httpContext.Request.Headers ["Host"] 值

multithreading - 使用互锁增量来增量STL映射的value字段。它是线程安全的吗?

java - 对象发布保证线程安全

java - 有一个 Mapper 类是线程安全的

asp.net - IIS 不使用用户环境变量

c# - VB.Net 和 C# "As New WebControl"之间的区别

c# - 如何测试锁内等待线程

c# - 使用 "ConcurrentDictionary.GetOrAdd()"时避免陈旧(逻辑上损坏)数据,包括重现代码

asp.net - 在HiddenField asp.net中存储字符串数组