使自定义对象线程安全

2024-01-04

我发布了一个先前的问题 https://stackoverflow.com/questions/30708687/c-sharp-return-a-copy-of-concurrentbag关于返回集合,又提到了线程安全的话题。我得到了这个link https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx进行更多阅读,我发现了这一行:

一般来说,避免锁定公共类型或超出您范围的实例 代码的控制。

首先,如果我错了,请纠正我,但是微软的例子不是锁定了一个公共类型,即余额变量吗?

其次,我将如何锁定我自己的 getter/setter 属性。假设我有以下课程:

private int ID;

public Person(int id)
{
    this.Identification= id;

}

public int Identification
{
    get { return this.ID; }

    private set
    {
        if (value == 0)
        {
            throw new ArgumentNullException("Must Include ID#");
        }
        this.ID = value;
    }
}

getter 是公开的吗?只有 setter 被声明为私有。那么,我如何锁定或使我的 getter/setter 属性线程安全?


你应该定义一个变量Person像这样的类

private readonly object _lock_ = new Object();

如果你想同步所有实例Person你应该做到static.

然后当你想锁定时你可以这样做

lock(_lock_) //whose there? it's me, I kill you! oops sorry that was knock knock
{
    //do what you want
}

我建议你阅读这篇文章:1 http://www.albahari.com/threading/part2.aspx#_Locking

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使自定义对象线程安全 的相关文章

随机推荐