当前位置:  开发笔记 > 编程语言 > 正文

C#同步对象 - 与写入访问器重复的代码

如何解决《C#同步对象-与写入访问器重复的代码》经验,为你挑选了1个好方法。

我喜欢使用在更改属性时锁定的私有对象同步自身的对象.有没有通用的方法来实现这一目标?对于每个属性,我的代码看起来总是这样(带有一个更衣室对象)

private Object locker = new Object();
private int x; 
    public int X
    {
    get {return x;} 
    set{
        lock(locker){x=value;}
    }

是否是实现线程安全修改属性的更简单方法.



1> Jon Skeet..:

你的代码看起来应该不那样 - 你也应该锁定get.否则,由于复杂的内存模型原因,获取数据的线程可能无法获得最新值.

但不,我不知道有什么方法可以解决这个问题.你可以用lambda表达式和扩展方法做一些奇怪的事情,但它会过度使用IMO.

您还应该强烈考虑是否确实希望各个属性是线程安全的.这可能是正确的做法 - 但我发现通常我不需要大多数类型的线程安全.只有少数类型需要直接了解线程,然后他们在使用对象时取出适当的锁,而不是执行锁定的对象.它确实取决于你正在做什么.

对于某些情况下,另一种方法是使用一成不变的类型-这是不错的,当你可以做到这一点,但如果你需要一个线程看到另一个所做的更改,你需要一些类型的波动或同步的.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有