C# 能否将线程安全对象定义为只读变量?
我可以像下面这样定义lockObject吗C# 能否将线程安全对象定义为只读变量?,c#,multithreading,thread-safety,C#,Multithreading,Thread Safety,我可以像下面这样定义lockObject吗 private readonly object lockObject; 或者应该像这样被玷污: private object lockObject; 99.99%的时间使用只读 传统上,您希望使用只读对象作为锁,原因是在变量lockObject处对对象进行锁定。如果您不将其设置为只读,并且它会发生更改,则可能会出现多个线程将锁放置在不同对象上的情况 下面是一个关于senario的很好的列表说明,它可能会在不使用只读锁的情况下导致问题 线程A在loc
private readonly object lockObject;
或者应该像这样被玷污:
private object lockObject;
99.99%的时间使用只读 传统上,您希望使用只读对象作为锁,原因是在变量
lockObject
处对对象进行锁定。如果您不将其设置为只读,并且它会发生更改,则可能会出现多个线程将锁放置在不同对象上的情况
下面是一个关于senario的很好的列表说明,它可能会在不使用只读锁的情况下导致问题
lockObject
lockObject
lockObject
处获取锁,这与步骤1中的锁不同这将是因为某些原因,你想要改变你的锁,也就是说,你控制访问的资源被改变了,但是可能还有线程在前一个资源上工作,你认为它们当前的操作对你的程序仍然有效,你不想等待他们改变锁。strong>同样,这是警告,您可能不应该这样做
99.99%的时间使用只读 传统上,您希望使用只读对象作为锁,原因是在变量lockObject
处对对象进行锁定。如果您不将其设置为只读,并且它会发生更改,则可能会出现多个线程将锁放置在不同对象上的情况
下面是一个关于senario的很好的列表说明,它可能会在不使用只读锁的情况下导致问题
lockObject
lockObject
lockObject
处获取锁,这与步骤1中的锁不同这将是因为某些原因,你想要改变你的锁,也就是说,你控制访问的资源被改变了,但是可能还有线程在前一个资源上工作,你认为它们当前的操作对你的程序仍然有效,你不想等待他们改变锁。strong>同样,这也伴随着警告,如果在初始化后不需要写入字段,则可能不应该这样做
,然后将其定义为只读。锁定对象是一个不应该改变的东西的好例子。@GlorinOakenfoot谢谢,但是.net framework需要写入锁定对象吗?但是您需要创建对象。通常您会写:private readonly object lockObject=new object()
@Fred No.lock
指令(以及通常的监视器。输入/监视器。退出“实现”锁)在一个连接到对象的特殊表中使用一些元数据。这里,它解释了在Microsoft.NET中锁写入一些“隐藏”锁定对象的前置内存:如果初始化后不需要写入字段,则将其定义为只读。锁定对象是一个不应该改变的东西的好例子。@GlorinOakenfoot谢谢,但是.net framework需要写入锁定对象吗?但是您需要创建对象。通常您会写:private readonly object lockObject=new object()
@Fred No.lock
指令(以及通常的监视器。输入/监视器。退出“实现”锁)在一个连接到对象的特殊表中使用一些元数据。这里,它解释了在Microsoft.NET中锁写入一些“隐藏”锁定对象的前置内存: