我在这里问了一个很糟糕的问题Lock on a variable in multiple threads所以为了清楚起见,我将在这里提问,希望我能正确提问。
classA
creates instance of classB
has methodA that can update & uses classB's myVar
has methodB that can update & uses classB's myVar
classB
has a variable myVar
methodA 和 methodB 都可以在单独的线程中运行(在主线程中调用)。我如何确保这是线程安全的?
最佳答案
使用lock
关键字来保护可以被多个线程同时执行的代码。
public class ClassA
{
private ClassB b = new ClassB();
public void MethodA()
{
lock (b)
{
// Do anything you want with b here.
}
}
public void MethodB()
{
lock (b)
{
// Do anything you want with b here.
}
}
}
请务必注意,lock
不会保护或锁定语句中使用的对象实例。相反,如果使用相同对象实例的另一个部分已经在执行,则该对象用作识别应阻止执行的代码部分的方法。换句话说,您可以在 lock
语句中使用您喜欢的任何对象实例,并且访问 ClassB
的成员仍然是安全的。
关于c# - 如何锁定在多个线程中使用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4082339/