C#相当于Java的同步(abc.class)

时间:2017-03-08 08:38:05

标签: java c# multithreading synchronization

我想知道是否存在以下Java代码的C#等价物:

DataRow drTest1 = dtTest.NewRow();             // not yet added, you need: dtTest.Rows.Add(drTest1);
DataRow drTest2 = dtTest.Rows.Add();           // already added without values
DataRow drTest3 = dtTest.Rows.Add(1, "test");  // already added with values

如果没有相应的,那我怎样才能在C#中模拟它?

  • synchronized (abc.class) { // code here } 是我在该计划中的一个课程。
  • abc属性和方法(其中一些是静态的)是许多线程同时访问的。

2 个答案:

答案 0 :(得分:1)

不要阻止课程!这可能会导致代码中出现很大问题。相反,使用lock构造从代码中访问静态资源:

class Abc
{
    private static object _resource;
    static Abc()
    {
        _resource = new object();
    }

    public static void Method1()
    {
        lock (_resource)
        {
            // this will run for only one thread at a time
        }
    }

    public static void Method2()
    {
        lock (_resource)
        {
            // this will run for only one thread at a time
        }
    }
}

此外,如果一个线程只需要在不写入资源的情况下读取资源,您可以使用ReadWriteLockSlim)进行同步。

答案 1 :(得分:-1)

要锁定整个班级,请使用以下内容:

lock (typeof(abc))
{
   // code here
}