Sim*_*One 15 c# multithreading locking
我在这里严重问了一个问题锁定多个线程中的变量,所以为了清楚起见,我将在这里问它并希望我能正确地问它.
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
Run Code Online (Sandbox Code Playgroud)
methodA和methodB都可以在不同的线程中运行(在main的新线程中调用).我如何确保这是线程安全的?
Bri*_*eon 21
使用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.
}
}
}
Run Code Online (Sandbox Code Playgroud)
重要的是要注意,lock不保护或锁定语句中使用的对象实例.相反,如果另一个使用相同对象实例的部分已在执行,则该对象用作标识应阻止执行的代码段的方法.换句话说,您可以在lock语句中使用您喜欢的任何对象实例,并且访问其成员仍然是安全的ClassB.