Mutex构造函数,第一个参数是获取所有权,第二个参数是互斥变量名,第三个是新创建true,还是已存在false。 需要注意的是Mutex对象即使不是新创建的,也需要进行释放,否则下一次获取都是返回已存在

ToolMutex.Exist判断互斥是否已存在,不会创建互斥对象,适用于检查某种操作是否完成

IsFirst 判断是否第一次运行,并且创建互斥对象,如果再次调用时,会返回false; Close 关闭当前互斥对象 。在进程的不同线程中可以多次IsFirst与Close

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.AccessControl;
using System.Text;namespace LibCSharpSyntax.操作系统
{public class ToolMutex{System.Threading.Mutex mutex = null;///<summary>///判断程序是否正在运行 ///</summary>///<param name="appId">程序名称</param>///<returns>如果程序是第一次运行返回True,否则返回False</returns>public bool IsFirst(string appId){bool bExist = false;mutex = new System.Threading.Mutex(true, appId, out bExist);if (bExist && mutex.WaitOne(1)){return true;}else{Relase();return false;}#region openmutex//if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero)//{//    CreateMutex(IntPtr.Zero, 0, appId);//    ret = true;//}//return ret;#endregion}public static bool Exist(string appId){bool bExist = false;var localmutex = new System.Threading.Mutex(false, appId, out bExist);localmutex.Close();localmutex.Dispose();localmutex = null;return !bExist;}private void Relase(){if (mutex != null){mutex.Close();mutex.Dispose();mutex = null;}}/// <summary>/// 释放占用/// </summary>public void Close(){if (mutex != null){mutex.ReleaseMutex();Relase();}#region OpenMutex//var handle= OpenMutex(0x1F0001, 0, appId);//if ( handle!= IntPtr.Zero)//{//    ReleaseMutex(handle);//}#endregion}#region WINDOWS API//[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]//private static extern IntPtr OpenMutex(//    uint dwDesiredAccess, // access //    int bInheritHandle,    // inheritance option //    string lpName          // object name //    );//[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]//private static extern IntPtr CreateMutex(//    IntPtr lpMutexAttributes, // SD //    int bInitialOwner,                       // initial owner //    string lpName                            // object name //    );//[DllImport("kernel32.Dll", EntryPoint = "ReleaseMutex", SetLastError = true)]//private static extern int ReleaseMutex(IntPtr hMutex);#endregion}
}

c# Mutex 互斥操作相关推荐

  1. Linux系统编程----16(线程同步,互斥量 mutex,互斥锁的相关函数,死锁,读写锁)

    同步概念 所谓同步,即同时起步,协调一致.不同的对象,对"同步"的理解方式略有不同.如,设备同步,是指在两 个设备之间规定一个共同的时间参考:数据库同步,是指让两个或多个数据库内容 ...

  2. Linux并发与同步专题 (4) Mutex互斥量

    关键词:mutex.MCS.OSQ. 信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作. 信号量的count初始化为1,down()/up()也可以实现类似m ...

  3. MySQL mutex互斥锁

    在事务机制中,锁机制是为了保证高并发,数据一致性的重要实现方式.MySQL除了Innodb引擎层面的行锁,还有latch锁.latch锁的作用资源协调处理.包含表句柄,线程,cpu线程,内存池等.其保 ...

  4. Go sync.Mutex互斥锁的学习

    1. 前言 1.1 基础回顾 原子操作:指那些不能够被打断的操作被称为原子操作,当有一个CPU在访问这块内容addr时,其他CPU就不能访问. CAS:比较及交换,其实也属于原子操作,但它是非阻塞的, ...

  5. golang sync.Mutex 互斥锁 使用实例

    实例: var mutex sync.Mutex //互斥锁 func printer(str string){mutex.Lock() //加锁defer mutex.Unlock() //解锁fo ...

  6. Linux系统编程:使用semaphore信号量和mutex互斥量实现多个生产者和消费者模型

    代码实现 如题,使用semaphore信号量和mutex互斥量实现多个生产者和消费者模型.本来是想只用信号量实现生产者消费者模型的,但是发现 只能在一个生产者和一个消费者之间,要在多个生产者和消费者模 ...

  7. Linux系统编程:使用mutex互斥锁和条件变量实现多个生成者和消费者模型

    实现代码 如题,使用mutex互斥锁和条件变量实现多个生成者和消费者模型. 直接上代码,需要线程中的互斥锁和条件变量的相关知识进行支撑.这里就不细说了呀,代码中有一定的注释. #include < ...

  8. golang mutex互斥锁分析

    互斥锁:没有读锁写锁之分,同一时刻,只能有一个gorutine获取一把锁 数据结构设计: type Mutex struct {state int32 // 将一个32位整数拆分为 当前阻塞的goro ...

  9. golang 1.10 mutex互斥锁源码

    Mutex锁分为normal模式和starvation模式.一开始默认处于normal模式.在normal模式中,每个新加入竞争锁行列的协程都会直接参与到锁的竞争当中来,而处于starvation模式 ...

最新文章

  1. import pymysql 没有模块_小白详细的 python 模块的运用
  2. c++ 单例模式_Java面试题总结之设计模式、网络基础、常用算法
  3. 论:开发者信仰之“天下IT是一家“(Java .NET篇)
  4. SQL-十步完全理解 SQL
  5. Google Analytics 搜索引擎来源
  6. Mysql--重点1
  7. 什么是python自动化测试_python已经自动化了,大家一般用什么测试框架?
  8. linux下的shell和脚本
  9. 倒计时 2 天!「2019 嵌入式智能国际大会」全日程大公开!
  10. 无锁编程(三) - 忙等待
  11. 模板 - 洲阁筛 + min25筛
  12. 一些常用的正则表达式收集
  13. Go 语言高性能编程
  14. 超像素分割图神经网络资料汇总
  15. 前端开发之谷歌实用插件fehelper JSON助手
  16. DroidCam使用安卓手机当电脑摄像头
  17. 原子结构示意图全部_所有原子结构示意图 元素周期表
  18. 脱壳之压缩壳-FSG
  19. NO.83 常用二维码对比(QR、PDF417、DM、汉信码)
  20. Alienware Area-51M 安装Win10+Ubuntu18.04 双系统

热门文章

  1. 停止字jQuery中图片隐藏效果的的所有方法
  2. Tomcat启动出现中文乱码的解决方案
  3. centos 服务器性能测试工具UnixBench
  4. 微信小程序-页面间如何进行传递数据(通信)
  5. Google要做手机芯片 但和苹果的不太一样
  6. C语言实现一个Window控制台带彩色,且可以用方向键选择并确认的菜单式列表(一)
  7. 计算机毕业设计、课程设计、实战项目之[含论文+源码等]基于SpringBoot在线电影订票系统[包运行成功]
  8. zabbix监控华为路由器
  9. HEVC,VP9,x264性能对比
  10. CPS推广实例(随时更新补充)