场景如下:
public class MainClass
{
private static Object common_object;
protected int Method_A()
{
...
lock (common_object)
{
// Works with common_object;
...
}
...
// Invokes another's thread Method_B
}
protected int Method_B()
{
...
}
}
我有一个类:“主类”,以及它的 2 个(或更多)实例。
该类有一个对象(私有、静态),每个实例都共享该对象,并在需要时使用“lock(){...}”进行保护。我对此没有任何问题。
该类也有 2 种方法,它们让我疯狂地试图让一切正常工作。
假设有一个“主要方法/函数”,A,它是从外部调用的(我无法控制这个调用,也不知道什么时候会发生,但几乎所有时间都在一个之间有很短的空间调用和下一个)在两个线程上。
还有第二种方法,B,更短(在执行时间和代码中)。
这是问题所在:
t2 调用方法 A
t1 调用方法 A
t2(来自方法 A)调用 t1 的方法 B
t1 和 t2 被阻塞。
一个线程(t2)的方法 B 是从另一个线程(t1)的方法 A 调用的,如果在 t2 正在执行方法 A 时调用了它,那么一切都会以某种方式崩溃。通常两个线程都被阻塞。
我正在使用一个标志变量,所以当 t2 开始执行方法 A 时,t1 使用这个标志来知道在 t2 完成方法 A 执行之前他不能调用 t2 的方法 B,但似乎我错过了一些东西因为它不起作用。
我习惯于使用 Java,但我想 C# 代码中存在完全相同的逻辑,我认为 C# 中一定有一些我缺少的函数或“技巧”。
我想(并希望)必须有一种简单的方法来解决这个问题,因为它不是市长的问题,所以我终于来了,3 天后寻求帮助,但我自己没有任何重大进展。
提前致谢。