可变线程安全和锁定关键字

时间:2015-09-17 08:34:03

标签: c# multithreading task-parallel-library

我正在编写C#应用程序,其中典型的情况是多个线程使用局部变量。我试图变得聪明,而不是明确地使用 lock 关键字,我来到了以下课程:

public class LockedVariable<T>
{
    T innerValue;
    object lockObj;
    public LockedVariable(T obj)
    {
        innerValue = obj;
        lockObj = new object();
    }


    public T Value
    {
        get
        {
            lock (lockObj)
            {
                return innerValue;
            }
        }
        set
        {
            lock (lockObj)
            {
                this.innerValue = value;
            }
            return;
        }
    }
}

之后,我开始怀疑它的一些事情:

  1. 它易于使用,但它甚至可以正常工作吗?也许它根本不是线程安全的,只有当我用 lock 关键字包围对这个类的每个引用时才会这样?
  2. Maybae在.NET框架的某个地方已经有相当于这样的类了吗?
  3. 如果多个线程试图访问示例局部变量(在我的情况下,值类型的变量,如简单的Int32,bool,枚举等),最糟糕的事情是什么?当两个线程试图访问同一个变量或什么时,我的应用程序会崩溃(抛出异常)吗?
  4. (与3相关)如果这是一个作者 - 读者场景(一个线程更改&#39变量的值,另一个读取它),该怎么办?可能没有使用 lock 关键字使应用程序崩溃,或者最糟糕的事情是读者线程会看到过时的值?

0 个答案:

没有答案