c# - 类级别的公共(public)属性是线程安全的

标签 c# multithreading

如果 w3wp.exe 是负责满足 Web 应用程序所有传入请求的进程(如果我错了请纠正我),并且如果我有一个类,我们就这样调用它为 Customer

public class Customer  
{  
  public string FirstName{get;set;}  
  public string LastName{get;set;}
}

所以现在当像这样在代码中访问这个类时

 var customer = new Customer();

在堆中创建了一个实例,并且在 w3wp.exe 中运行的所有线程都可以访问客户对象的 FirstName 和 LastName 属性。

那么,在这种情况下,FirstName 和 LastName 属性不是线程安全的吗?使用仅属于特定实例且线程安全的私有(private)属性总是明智的吗?

最佳答案

虽然编译器为自动属性创建了一个支持字段,但它不会在其上创建任何同步。

至于线程安全——这取决于您在线程中对此类对象执行的操作。如果每个线程有一个不同的对象,没问题。

如果您从多个线程访问相同对象(即共享资源),情况会有所不同:

如果您所做的只是读取 一个值而不是设置 从多个线程中,则没有问题。

如果您修改来自多个线程的对象,可能会出现问题。这需要同步,您可以将其添加到您的线程代码中。

关于c# - 类级别的公共(public)属性是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4930848/

相关文章:

java - 将 Spring 与 JavaFX Service 类集成会导致 Service 失败

objective-c - 使用线程等待另一个类的方法执行,或者有更简单的方法吗?

c++ - 由于对象的使用方式,我担心这段代码没有按照我想要的方式执行

c# - 在不同的线程上连接到数据库

c# - ASP.NET Core 3.1 不在实现 IPostConfigureOptions<T> 的类上调用 PostConfigure

c# - Monitor类是如何实现的?

c - 如何停止C process.h中的特定线程?

c# - 通过使用 if 访问字典来缩短代码

c# - 从域网络外部的 LDAP 重置密码 C# 错误 : RPC server is unavailable.(hresult 的异常:0x800706ba)

c# - 具有自定义 map 提供程序的 GMap.NET.GMapControl?