多个线程调用同一个函数,只有一个线程应该调用它
本文关键字:线程 调用 有一个 函数 同一个 | 更新日期: 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代码示例,清楚地显示您尝试过的内容,并准确地描述该代码的作用以及与您希望它做的不同之处。