C#利用Mutex互斥量实现同时只有一个进程实例在运行

本文介绍了如何使用C#的Mutex互斥量确保在同一台计算机上仅有一个进程实例运行。通过示例展示了在控制台程序和Winform应用程序中的实现方式,详细解释了Mutex的工作原理,并提供了相关参考资料链接。
摘要由CSDN通过智能技术生成
   

我们在做程序时,有时候希望在一台电脑上面只有一个进程实例在运行,利用Mutex互斥量可以实现了这个功能,方法及步骤如下:

关于互斥量Mutex的理解及用法可以参考博客http://blog.csdn.net/xwdpepsi/article/details/6346890

接下来分控制台程序和Winform程序两种情况下实现此功能

1.控制台程序

参考别人的博客的代码实验

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace myConApp
{
    class Test
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            bool flag = false;
            System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag);
            //第一个参数:true--给调用线程赋予互斥体的初始所属权
            //第一个参数:互斥体的名称
            //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true
            if (flag)
  
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 打开RT-thread studio,点击新建项目,选择RT-thread项目模板,填写项目名称、路径等信息,创建一个新项目。 2. 在项目文件夹下创建一个新文件,命名为led_thread.c,用于编写流水灯线程代码。 3. 在led_thread.c中引入头文件,包括rtthread.h和rtdevice.h。 ``` #include <rtthread.h> #include <rtdevice.h> ``` 4. 定义一个互斥,用于控制LED灯的互斥访问。 ``` static rt_mutex_t led_mutex; ``` 5. 在线程函数led_thread中初始化互斥,并循环实现流水灯的效果。 ``` void led_thread(void *parameter) { rt_mutex_init(&led_mutex, "led_mutex", RT_IPC_FLAG_FIFO); while(1) { rt_mutex_take(&led_mutex, RT_WAITING_FOREVER); /* 控制LED灯亮起 */ rt_mutex_release(&led_mutex); rt_thread_delay(1000); rt_mutex_take(&led_mutex, RT_WAITING_FOREVER); /* 控制LED灯熄灭 */ rt_mutex_release(&led_mutex); rt_thread_delay(1000); rt_mutex_take(&led_mutex, RT_WAITING_FOREVER); /* 控制LED灯亮起 */ rt_mutex_release(&led_mutex); rt_thread_delay(1000); rt_mutex_take(&led_mutex, RT_WAITING_FOREVER); /* 控制LED灯熄灭 */ rt_mutex_release(&led_mutex); rt_thread_delay(1000); } } ``` 6. 在main函数中创建led_thread线程并启动。 ``` int main(void) { rt_thread_t tid; tid = rt_thread_create("led", led_thread, RT_NULL, 512, 25, 5); if (tid != RT_NULL) rt_thread_startup(tid); return 0; } ``` 7. 编译代码并下载到开发板中运行,即可看到流水灯的效果。 完整代码如下: ``` #include <rtthread.h> #include <rtdevice.h> static rt_mutex_t led_mutex; void led_thread(void *parameter) { rt_mutex_init(&led_mutex, "led_mutex", RT_IPC_FLAG_FIFO); while(1) { rt_mutex_take(&led_mutex, RT_WAITING_FOREVER); /* 控制LED灯亮起 */ rt_mutex_release(&led_mutex); rt_thread_delay(1000); rt_mutex_take(&led_mutex, RT_WAITING_FOREVER); /* 控制LED灯熄灭 */ rt_mutex_release(&led_mutex); rt_thread_delay(1000); rt_mutex_take(&led_mutex, RT_WAITING_FOREVER); /* 控制LED灯亮起 */ rt_mutex_release(&led_mutex); rt_thread_delay(1000); rt_mutex_take(&led_mutex, RT_WAITING_FOREVER); /* 控制LED灯熄灭 */ rt_mutex_release(&led_mutex); rt_thread_delay(1000); } } int main(void) { rt_thread_t tid; tid = rt_thread_create("led", led_thread, RT_NULL, 512, 25, 5); if (tid != RT_NULL) rt_thread_startup(tid); return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值