C#相当于Java';s已同步(abc.class)
我想知道是否有C#等价于以下Java代码:C#相当于Java';s已同步(abc.class),java,c#,multithreading,synchronization,Java,C#,Multithreading,Synchronization,我想知道是否有C#等价于以下Java代码: synchronized (abc.class) { // code here } 如果没有等价物,那么如何在C#中模拟它 abc是我的课程之一 abc属性和方法(其中一些是静态的)由多个线程同时访问 要锁定整个类,请使用以下命令: lock (typeof(abc)) { // code here } 要锁定整个类,请使用以下命令: lock (typeof(abc)) { // code here } 不要挡住课堂!这可能
synchronized (abc.class) {
// code here
}
如果没有等价物,那么如何在C#中模拟它
是我的课程之一abc
属性和方法(其中一些是静态的)由多个线程同时访问abc
lock (typeof(abc))
{
// code here
}
要锁定整个类,请使用以下命令:
lock (typeof(abc))
{
// code here
}
不要挡住课堂!这可能会导致代码中出现非常大的问题。相反,使用
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
}
}
}
此外,如果一个线程只需读取资源而不向其写入,则可以使用
读写锁定(Slim
)进行同步。不要阻止该类!这可能会导致代码中出现非常大的问题。相反,使用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
)进行同步。这将是lock(lockObj)
。请参阅:对于类,请使用[MethodImpl(methodimpoptions.Synchronized)]
属性,对于属性/字段,应使用lock(name)
。这是有问题的,因为当两个线程同时访问两个不同的方法,并且它们都访问同一个静态成员时,改变它并相互干扰。我需要整个类和它的成员被锁定,以让每个方法在不中断的情况下完成。这将是lock(lockObj)
。请参阅:对于类,请使用[MethodImpl(methodimpoptions.Synchronized)]
属性,对于属性/字段,应使用lock(name)
。这是有问题的,因为当两个线程同时访问两个不同的方法,并且它们都访问同一个静态成员时,改变它并相互干扰。我需要整个类及其成员被锁定,以使每个方法在不中断的情况下完成。强烈建议不要这样做。@VMAtm:INTERTIONAL,它相当于原始Java代码。强烈建议不要这样做。@VMAtm:INTERTIONAL,除了VMAtm应答,请记住,如果线程位于method1内部,则没有线程可以进入method2,因为资源被锁定。如果每个方法都需要锁,请使用两个不同的资源对象。除了VMAtm应答之外,请记住,如果线程位于method1内部,则没有线程可以进入method2,因为资源已被锁定。如果每个方法都需要锁,请使用两个不同的资源对象。