MultiThread Mutex
来源:互联网 发布:网络版权侵权案例 编辑:程序博客网 时间:2024/06/10 03:58
/************************************************************************/
/*互斥对象(mutex)属于内核对象,它能够确保线程拥有对单个资源的互斥访问权。
互斥对象包含一个使用数量,一个线程ID和一个计数器。其中ID用于标识系统中的
哪个线程当前拥有互斥对象,计数器用于指明该线程用友互斥对象的次数。
The CreateMutex function creates or opens a named or unnamed mutex object.
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // SD security
BOOL bInitialOwner, // initial owner
LPCTSTR lpName // object name
);
线程必须主动请求共享对象的使用权才有可能获得该所有权,通过WaitForSingleObject实现
注意调用WaitForSingleObject的位置
Attention:对互斥对象来说,谁拥有谁释放
*/
/************************************************************************/
#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
//两个全局变量,属于应用程序进程的,应该可以说明线程能够访问进程的所有内存,也能访问在这个进程
//中的所有其他线程的堆栈
int index=0;
int tickets=100;
HANDLE hMutex;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
//创建线程
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
hMutex=CreateMutex(NULL,TRUE,"test");
//利用互斥保证程序只有一个实例运行
if (hMutex)
{
if (ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"Only one instance can run!"<<endl;
return;
}
}
WaitForSingleObject(hMutex,INFINITE);
ReleaseMutex(hMutex);
//////////////////////////////////////////////////////////////////////////
ReleaseMutex(hMutex);
Sleep(4000);
CloseHandle(hThread1);
CloseHandle(hThread2);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if (tickets>0)
{
Sleep(1);
cout<<"thread1 sells ticket:"<<tickets--<<endl;
}
else
{
break;
}
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if (tickets>0)
{
Sleep(1);
cout<<"thread2 sells ticket:"<<tickets--<<endl;
}
else
{
break;
}
ReleaseMutex(hMutex);
}
return 0;
}
- MultiThread Mutex
- MultiThread(3)-Mutex
- MultiThread(4)-Mutex
- MultiThread(5)-Mutex
- MultiThread 2
- HttpClient Multithread
- Multithread chips
- OGRE - MultiThread
- multithread(1)
- multiThread(2)
- multithread copy
- Java multithread
- Mutex
- Mutex
- mutex
- Mutex
- Mutex
- Mutex
- JAVA基础知识精华总结
- HTML 5的五个激动人心的特性
- .net打包
- 虚拟化应用为什么那么难?【ZT】
- 深入浅出C# 中文版 图文皆译 第四章 类型和引用 page127
- MultiThread Mutex
- 从HTML文件中抽取正文的简单方案 试验结果
- Web Service简介
- 十九种不良生活习惯(最后一条尤其重要)
- 一些常用的WebServices
- 阿拉伯数字转汉字数字(C#)
- 使用Web服务提升ERP
- XML Web Service是ERP与其他外围应用结合的大势所趋
- 今生你嫁的人就是前世葬你的人