Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止方法同时从不同线程执行_C# - Fatal编程技术网

C# 防止方法同时从不同线程执行

C# 防止方法同时从不同线程执行,c#,C#,防止一个方法同时执行两次的唯一方法是使用lock语句,对吗 private object lockMethod = new object(); public void Method() { lock (lockMethod) { // work } } public void FromThread1() { Method(); } public void FromThread2() { Method(); } 当然,我也可以使用几乎相同的M

防止一个方法同时执行两次的唯一方法是使用
lock
语句,对吗

private object lockMethod = new object();

public void Method() {
    lock (lockMethod) {
        // work
    }
}

public void FromThread1() {
    Method();
}

public void FromThread2() {
    Method();
}
当然,我也可以使用几乎相同的
MethodImpl(methodimpoptions.Synchronized)

还有其他技术吗

防止方法同时执行两次的唯一方法是使用lock语句,对吗

private object lockMethod = new object();

public void Method() {
    lock (lockMethod) {
        // work
    }
}

public void FromThread1() {
    Method();
}

public void FromThread2() {
    Method();
}
不,但这是“标准”方式,可能是最好的。也就是说,通常使用锁来同步对特定数据的访问,而不是对整个方法的访问。锁定整个方法可能会导致更多的阻塞


至于其他方法,名称空间包含许多其他类型的同步方法,包括
ReaderWriterLockSlim
信号量
互斥体
监控类
(这是
内部使用的)等。所有这些方法都提供了各种同步数据的方法,尽管每一个都是为不同的场景而设计的。在这种情况下,
lock
是合适的方法。

我有点担心您试图锁定一个方法而不是锁定数据——您想解决什么问题?既然您没有显示任何
静态
方法,那么您真的试图防止在同一时间对同一实例执行两次方法吗?或者同时为单个实例使用任意两个方法?该方法非常小,在我的情况下,锁定该方法=锁定数据