多个线程调用同一个函数,只有一个线程应该调用它

本文关键字:线程 调用 有一个 函数 同一个 | 更新日期: 2023-09-27 18:25:36

我有一个函数(Shutdown()),用于终止我的windows窗体(进行一些清理并在最后调用this.close())。

在我的应用程序中,我有执行的线程

  • UI
  • 背景工作者
  • 计时器

其中每一个都可以通过用户按下按钮(UI)、计时器到期(计时器)或后台工作人员完成任务来调用Shutdown()。这让我担心,如果时间真的很糟糕,我可能会有多个线程同时调用Shutdown()。

那么,我如何确保只有第一个调用它的人才能执行它呢?任何后续调用都应该被忽略,因为该调用无论如何都会终止应用程序。

多个线程调用同一个函数,只有一个线程应该调用它

从你的问题中还不清楚困难是什么。你试过什么?你遇到了什么麻烦?

显而易见的、琐碎的实现是这样的:

private readonly object _lock = new object();
private bool _shuttingDown;
public void Shutdown()
{
    lock (_lock)
    {
        if (_shuttingDown) return;
        _shuttingDown = true;
    }
    // do work here...
}

有什么原因在你的场景中不起作用吗?如果是这样的话,请提供一个好的、最小的complete代码示例,清楚地显示您尝试过的内容,并准确地描述该代码的作用以及与您希望它做的不同之处。