这是互斥体的正确使用吗?

2024-01-07

我遇到的情况是,我可能同时运行一个程序的多个实例,并且重要的是,不要同时在多个实例中执行一个特定函数。

这是使用互斥锁来防止这种情况发生的正确方法吗?

lock (this.GetType()) {
    _log.Info("Doing Sync");
    DoSync();
    _log.Info("Sync Completed");
}

您说的是一个应用程序的多个实例,所以我们谈论的是两个program.exe 正在运行,对吧? lock 语句不会跨多个程序加锁,只会在程序内加锁。如果你想要一个真正的互斥锁,请查看系统.线程.互斥体 https://learn.microsoft.com/en-us/dotnet/api/system.threading.mutex object.

这是一个用法示例:

bool createdNew;
using (Mutex mtx = new Mutex(false, "MyAwesomeMutex", out createdNew))
{
    try
    {
        mtx.WaitOne();

        MessageBox.Show("Click OK to release the mutex.");
    }
    finally
    {
        mtx.ReleaseMutex();
    }
}

createdNew 变量会让您知道它是否是第一次创建。但它只告诉您它是否已创建。如果要获取锁,需要调用WaitOne,然后调用ReleaseMutex释放锁。如果您只想查看是否创建了互斥锁,那么只需构建它就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这是互斥体的正确使用吗? 的相关文章

随机推荐

  • 上下文操作模式不过滤触摸

    当上下文操作模式覆盖在 android support v7 widget Toolbar 顶部时 似乎不会过滤其整个宽度上的触摸 而是让触摸 落入 工具栏上的 不可见 小部件 我的工具栏包含一个自定义小部件 工具栏宣称的优点之一 我将上下
  • 如何更改seaborn.catplot中的标记大小

    所以我有这段代码可以生成一个图 g sns catplot data public x age y number col species kind strip jitter True order order palette palette
  • 如何在 php-fpm-alpine docker 容器内运行 cron 作业?

    你好 我不知道如何在里面运行 cron 作业this https github com docker library php blob c88c3d52f41a370f3a62e3ded62b7b223b4cb846 7 2 alpine3
  • 在上下文加载之前无法在 spring 中发布自定义事件

    我正在尝试在 Spring MVC 中发布自定义事件 但在加载上下文时不会触发 下面是代码片段 onConnectionOpened 将在连接到服务器后调用 该服务器在使用 PostConstruct 初始化 bean 后触发 Autowi
  • Node.js - 在管道响应之前检查流是否有错误

    在 Node js 中 假设我想从某处读取文件并流式传输响应 例如 从文件系统使用fs createReadStream application get files id function request response var read
  • powershell中的换行符不显示在记事本中

    如果我用记事本打开 test txt 它是一行 两个 测试 之间没有换行符 但如果我用 vim 或 ultraedit 打开它 我可以看到换行符 什么原因 Set Content test txt test n ntest update t
  • 时间:2019-05-17 标签:c#RegistrySystem.Byte[]tostring

    我目前正在编写一个程序 该程序将读取部分 Windows 系统注册表 但是这些键的某些值是 System Byte 类型 当我尝试解码这些值时 我可以生成一个包含一些可读字符的字符串 该字符串使但大多数字符串都是乱码 我尝试了几种编码类型
  • 如何将 wchar_t** 转换为 char**?

    我得到 argv 作为 wchar t 见下文 因为我需要使用 unicode 但我需要将其转换为 char 我怎样才能做到这一点 int wmain int argc wchar t argv 有不止一种方法可以做到这一点 根据您的环境和
  • C++ dll 的 C# 包装器; “运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。”错误

    下面是 C dll 中的代码 extern C declspec dllexport int testDelegate int addFunction int int int a int b int res addFunction a b
  • 在 PhpStorm 中调试项目

    我一直在网络和 StackOverflow 上寻找满意的答案 但没有成功 我应该如何使用 Magento 作为整个应用程序 而不是单个文件 进行调试PhpStorm集成开发环境 https www jetbrains com phpstor
  • 如何在Python中进行scp?

    在 Python 中 scp 文件的最 Pythonic 方法是什么 我知道的唯一路线是 os system scp s s s localfile remotehost remotefile 这是一种 hack 在类似 Linux 的系统
  • 根据名称中的模式更新列对

    这是我的数据框 col 1 lt c 1 2 NA 4 5 temp col 1 lt c 12 2 2 3 4 col 2 lt c 1 23 423 NA 23 temp col 2 lt c 1 2 23 4 5 df test lt
  • 为什么有些窗口收不到Windows消息

    在 Visual Studio 上使用 Spy 工具 我可以看到桌面或资源管理器 文件资源管理器 等窗口接收 WM 消息 但 Firefox 或 Visual Studio 等窗口不接收消息 为什么有的人能收到消息 有的人却收不到 通过 W
  • 从用户工作区加载类

    我正在编写一个 Eclipse 插件 它应该显示枚举类的一些信息 新视图应显示所有枚举常量和分配的值 枚举值以某种方式在构造函数中计算 并且在编辑器中并不明显它们在运行时将具有哪个值 这就是该插件的动机 我尝试访问由 eclipse AST
  • Java 多线程客户端/服务器 - java.net.SocketException:套接字已关闭

    我必须使用 Java 的套接字 api 编写多线程客户端和服务器 客户端和服务器都是多线程的 因此服务器可以处理多个连接 客户端可以测试服务器处理连接的能力 我的代码在这里 https github com sandyw Simple Ja
  • 如何检查 php://input 是否设置?

    我需要检查是否php input存在 设置 它可以与 PHP 一起使用吗isset https php net isset 正确的检查方法是什么 尝试用以下方法测试它file get contents http php net file g
  • 确定是否存在至少一行具有给定条件的行

    Employee 表有 ID 和 NAME 列 名称可以重复 我想查明是否至少有一行名称为 kaushik 所以查询应该返回 true false 或 1 0 是否可以使用单个查询找到它 如果我们尝试类似的事情 select count 1
  • 如何在 Tomcat 的 META-INF/context.xml 中指定路径

    我正在使用 Tomcat 7 希望在 war 文件本身中设置 war 文件的上下文根 并让 Tomcat 自动部署并选择此路径 我想我找到了通过将 context xml 放入包含的 war 的 META INF 目录中来做到这一点的方法
  • DataGrid DataGridTemplateColumn 组合框

    我的方法有问题ComboBoxes in a DataGrid 我用几张图来解释一下 这是起点 现在 如果我想添加新行 我单击最后一行并按 Enter 键 添加一个新行 并在此处选择类型表并为其命名为 MY TABLE 然后按 Enter
  • 这是互斥体的正确使用吗?

    我遇到的情况是 我可能同时运行一个程序的多个实例 并且重要的是 不要同时在多个实例中执行一个特定函数 这是使用互斥锁来防止这种情况发生的正确方法吗 lock this GetType log Info Doing Sync DoSync l