使用互斥体使程序只运行一个
来源:互联网 发布:网站建设软件下载 编辑:程序博客网 时间:2024/06/10 02:22
何为互斥体
引用了百科的话
互斥体实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex))。互斥体禁止多个线程同时进入受保护的代码“临界区”(critical section)。
其实互斥体就像信号量的PV操作一样的,可以用于线程间的同步,避免一个资源在被一个线程操作的同时,另外的一个线程也在进行操作,这样就会破坏操作的原子性。带来未知的错误
互斥体的作用
实际上互斥体MUTEX是用于线程同步
比如一个进程先进入临界区,先获得锁
另一个进程想进入时候try lock 发现被占用
那么直接返回,或者被挂起,等待这个资源被释放
互斥体的使用
下面就是简单的代码段,实现程序一次只能运行一个
HANDLE hMutex = NULL;//创建互斥对象 if(NULL != (hMutex = CreateMutex(NULL, FALSE, L"mutex"))){ if (GetLastError() == ERROR_ALREADY_EXISTS) { MessageBox(NULL, TEXT("Another Instance is RUNNING!!"), TEXT("ERROE"), MB_OK | MB_ICONINFORMATION); //关闭互斥对象,退出程序 CloseHandle(hMutex); exit(-1); }}
CreateMutex 创建一个互斥体并返回它的句柄 第一个是安全属性,null是默认, 第二个参数是是否 被隶属, 第三个也就是互斥体的名字,也就是我们 防止多开的关键
原理讲解
第一次运行创建了这个有名互斥体 ,
当第二次运行时候,发现存在同名互斥体,所以返回错误
使用GetLastError() 就可以得到,ALREADY_EXISTS的错误返回值,
判断后直接返回,这样就实现了,程序的单个运行
阅读全文
0 0
- 使用互斥体使程序只运行一个
- 只运行一个程序
- 只运行一个程序实例
- 只运行一个实例程序
- delphi 只运行一个程序
- 程序只运行一个实例
- 只运行一个程序实例
- 程序只运行一个实例
- 程序只运行一个实例
- 只允许运行一个程序
- winform只运行一个程序
- 程序只运行一个实例
- 如何使一个程序只运行一个
- 一个程序只运行一个实例
- 程序只运行一个是实例
- 怎样使程序只运行一个实例
- C++Builder 程序只运行一个实例
- 确保程序只运行一个实例
- 679. 24 Game
- 数据库连接池浅析
- 作业
- html input标签text类型的选择框
- intellij 找不到spring
- 使用互斥体使程序只运行一个
- [错误]java.lang.IllegalArgumentException: Index for header 'XXX' is 1 but CSVRecord only has 1 val
- 数据结构和算法学习——1 预备知识
- windos下redis的配置
- git常用命令
- 统计学简介之七——参数估计
- 作业
- Java第2周-循环不限次计算三角形面积
- Android RIL