直接上代码了:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
/* 第二个参数:TRUE在创建互斥量之后立马拥有该互斥量,
也可以创建后使用OpenMutex()函数获取并占有该互斥量
ReleaseMutex()用来释放拥有的互斥量
FALSE任何线程都不拥有该互斥量,该互斥量处于激发态,处于有信号状态 */
HANDLE hMutex = CreateMutexA(NULL, TRUE, "MyMutex");
/* 说明成功创建新互斥量或者获得已经存在互斥量句柄(Windows整个系统)*/
if (hMutex != NULL)
{
/* 说明获得已经存在同名互斥量句柄(Windows整个系统)*/
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
printf("Mutex Existed,Over\n");
system("pause");
return 0;
}
else
{
printf("Create Mutex Success\n");
Sleep(INFINITE);
}
}
/* OpenMutex() // 参数1:获取互斥量的权限 参数2:该互斥量句柄释放可以被子进程继承 参数3:互斥量名
WaitForSingleObject(hMutex, INFINITE); // 等待该互斥量处于激发状态,即不在被任何线程拥有
CloseHandle(hMutex); // 关闭句柄 */
return 0;
}
在使用进程浏览器查看互斥量时,发现互斥量名字如下:
前面绿线估计是Windows操作系统加上去的,后面的MyMutex菜是我们自己起的名字。