我想知道是否存在以下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
属性和方法(其中一些是静态的)是许多线程同时访问的。答案 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
}
}
}
此外,如果一个线程只需要在不写入资源的情况下读取资源,您可以使用ReadWriteLock
(Slim
)进行同步。
答案 1 :(得分:-1)
要锁定整个班级,请使用以下内容:
lock (typeof(abc))
{
// code here
}