相关疑难解决方法(0)

C#线程安全与get/set

这是C#的详细问题.

假设我有一个带有对象的类,并且该对象受到锁的保护:

Object mLock = new Object();
MyObject property;
public MyObject MyProperty {
    get {
         return property;
    }
    set { 
         property = value; 
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个轮询线程来查询该属性.我还希望线程偶尔更新该对象的属性,有时用户可以更新该属性,并且用户希望能够看到该属性.

以下代码是否会正确锁定数据?

Object mLock = new Object();
MyObject property;
public MyObject MyProperty {
    get {
         lock (mLock){
             return property;
         }
    }
    set { 
         lock (mLock){
              property = value; 
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

通过'正确',我的意思是,如果我想打电话

MyProperty.Field1 = 2;
Run Code Online (Sandbox Code Playgroud)

或者其他什么,我会在更新时锁定该字段?设置是由'get'函数范围内的equals运算符完成的,还是'get'函数(因此锁定)首先完成,然后设置,然后'set'被调用,从而绕过锁?

编辑:由于这显然不会做的伎俩,会是什么?我是否需要做以下事情:

Object mLock = new Object();
MyObject property;
public MyObject MyProperty {
    get {
         MyObject tmp = null;
         lock …
Run Code Online (Sandbox Code Playgroud)

c# locking properties thread-safety

50
推荐指数
3
解决办法
8万
查看次数

标签 统计

c# ×1

locking ×1

properties ×1

thread-safety ×1