下面写二个程序来验证下:
第一个程序创建互斥量并等待用户输入后就触发互斥量。第二个程序先打开互斥量,成功后就等待并根据等待结果作相应的输出。详见代码:
第一个程序:
#include<stdio.h>
#include<conio.h>
#include<windows.h>
constcharMUTEX_NAME[]="Mutex_MoreWindows";
intmain()
{
HANDLEhMutex=CreateMutex(NULL,TRUE,MUTEX_NAME);//创建互斥量
printf("互斥量已经创建,现在按任意键触发互斥量\n");
getch();
//exit(0);
ReleaseMutex(hMutex);
printf("互斥量已经触发\n");
CloseHandle(hMutex);
return0;
}
第二个程序:
#include<stdio.h>
#include<windows.h>
constcharMUTEX_NAME[]="Mutex_MoreWindows";
intmain()
{
HANDLEhMutex=OpenMutex(MUTEX_ALL_ACCESS,TRUE,MUTEX_NAME);//打开互斥量
if(hMutex==NULL)
{
printf("打开互斥量失败\n");
return0;
}
printf("等待中....\n");
DWORDdwResult=WaitForSingleObject(hMutex,20*1000);//等待互斥量被触发
switch(dwResult)
{
caseWAIT_ABANDONED:
printf("拥有互斥量的进程意外终止\n");
break;
caseWAIT_OECT_0:
printf("已经收到信号\n");
break;
caseWAIT_TIMEOUT:
printf("信号未在规定的时间内送到\n");
break;
}
CloseHandle(hMutex);
return0;
}
运用这二个程序时要先启动程序一再启动程序二。下面展示部分输出结果:
结果一.二个进程顺利执行完毕:

结果二.将程序一中//exit(0);前面的注释符号去掉,这样程序一在触发互斥量之前就会因为执行exit(0);语句而且退出,程序二会收到WAIT_ABANDONED消息并输出“拥有互斥量的进程意外终止”:

有这个对“遗弃”问题的处理,在多进程中的线程同步也可以放心的使用互斥量。
最后总结下互斥量Mutex:
1.互斥量是内核对象,它与关键段都有“线程所有权”所以不能用于线程的同步。
2.互斥量能够用于多个进程之间线程互斥问题,并且能完美的解决某进程意外终止所造成的“遗弃”问题。
秒杀多线程第八篇 经典线程同步 信号量Semaphore
前面介绍了关键段CS、事件Event、互斥量Mutex在经典线程同步问题中的使用。本篇介绍用信号量Semaphore来解决这个问题。
首先也来看看如何使用信号量,信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。
第一个CreateSemaphore
函数功能:创建信号量
函数原型:
HANDLECreateSemaphore(
LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,
LONGlInitialCount,
LONGlMaximumCount,
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33747-13.html
选个“总统”还要去老美那汇报
做为老百姓不建议
果然是美国带着日韩玩