我有一个可以从多个线程调用的方法,但我只想让第一个线程在方法内部执行一些逻辑。所以,我打算使用一个布尔变量。第一个进来的线程,会将布尔变量设置为 false(以防止更多线程进入),并执行方法逻辑。
使用此方法的后续线程将检查布尔变量。因为它被第一个线程设置为 false,所以它们将跳过方法逻辑。
在代码中,是这样的:
private void myMethod()
{
if (firsTime) //set to true in the constructor
{
firstTime = false; //To prevent other thread to come inside here.
//method logic
}
}
我想使用 lock 来执行此操作,但不确定将其放在哪里。
如果我锁定在“if”内部以将 firstTime 更改为 false,则可能有 2 个或更多线程已经进入 if(不想要这个)。
如果我在“if”之外锁定以将 firstTime 更改为 false,如果 firstTime 已经设置为 false,第一个线程如何进入 if 执行方法逻辑?
我的问题是:如何使锁具有所需的功能?(第一个线程设置布尔和执行方法逻辑)。
我无法锁定所有方法逻辑,因为这将是一个非常耗时的操作。