gpt4 book ai didi

c# - 如果另一个线程正在执行它,则退出该方法

转载 作者:可可西里 更新时间:2023-11-01 07:54:30 26 4
gpt4 key购买 nike

我在多线程应用程序中有一个方法,我希望调用此方法时出现以下行为:

  1. 如果当前没有其他线程正在执行该方法,则执行它。
  2. 如果另一个线程当前正在执行该方法,则退出该方法而不执行它。

C# 中的 lock 语句对于等待线程完成执行很有用,但我不想序列化对此方法的访问,而是绕过执行所述方法(如果它正在被执行)另一个线程。

最佳答案

您可以使用 Monitor.TryEnter 执行此操作,但也许更简单:互锁:

int executing; // make this static if you want this one-caller-only to
// all objects instead of a single object
void Foo() {
bool won = false;
try {
won = Interlocked.CompareExchange(ref executing, 1, 0) == 0;
if(won) {
// your code here
}
} finally {
if(won) Interlocked.Exchange(ref executing, 0);
}

}

关于c# - 如果另一个线程正在执行它,则退出该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com