windows下 C++ 多线程+使用互斥资源(购票程序为例)
2015-04-14 20:35
567 查看
因为需要些多线程的C++爬虫 之前弄得多线程没有使用互斥,然后出现一些问题就是,重复下载了网页......网上查了下 发现这块代码不多 所以我写个博客 分享给需要的人
编译环境VS2013+WIN8.1 或者codeblocks +win8.1 下面的代码是codeblocks下的,变化一处就可以放vs 见注释
代码参考了这里:http://bbs.csdn.net/topics/370051110
// MulThread.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
#include <windows.h>
#include <process.h>
#include <fstream>
#include <stdlib.h>
#include <cstdio>
using namespace std;
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int index = 0;
int tickets = 100;
HANDLE hMutex;
int main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
// hMutex=CreateMutex(NULL,TRUE,NULL);
hMutex = CreateMutex(NULL, TRUE, "queue");//如果是VS2013 hMutex = CreateMutex(NULL, TRUE, L"queue");
if (hMutex)
{
if (ERROR_ALREADY_EXISTS == GetLastError())
{
cout << "only one instance can run!" << endl;
return 0;
}
}
WaitForSingleObject(hMutex, INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
//Sleep(4000);
system("pause");
return 0;
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
编译环境VS2013+WIN8.1 或者codeblocks +win8.1 下面的代码是codeblocks下的,变化一处就可以放vs 见注释
代码参考了这里:http://bbs.csdn.net/topics/370051110
// MulThread.cpp : 定义控制台应用程序的入口点。
//
#include <iostream>
#include <windows.h>
#include <process.h>
#include <fstream>
#include <stdlib.h>
#include <cstdio>
using namespace std;
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int index = 0;
int tickets = 100;
HANDLE hMutex;
int main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);
hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
// hMutex=CreateMutex(NULL,TRUE,NULL);
hMutex = CreateMutex(NULL, TRUE, "queue");//如果是VS2013 hMutex = CreateMutex(NULL, TRUE, L"queue");
if (hMutex)
{
if (ERROR_ALREADY_EXISTS == GetLastError())
{
cout << "only one instance can run!" << endl;
return 0;
}
}
WaitForSingleObject(hMutex, INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
//Sleep(4000);
system("pause");
return 0;
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
相关文章推荐
- 在Windows下使用Dev-C++开发基于pthread.h的多线程程序【转】
- Windows下使用Dev-C++开发基于pthread.h的多线程程序
- windows qt 使用c++ posix接口编写多线程程序(一)
- windows qt 使用c++ posix接口编写多线程程序(真神奇)good
- Windows下使用Dev-C++开发基于pthread.h的多线程程序实例
- 使用cl.exe在windows控制台下编译C++程序
- 使用Mutex实现Windows下进程间互斥访问同一资源
- 如何在windows中使用cmd命令去编译,运行C++程序
- C++: windows使用gsoap开发webservice程序(单线程)---服务端
- Windows平台使用NDK编写在Android上运行的C/C++标准程序
- Windows下使用Eclipse运行C、C++程序
- Windows环境下使用cmd面板手动编译c/c++程序
- C++ 多线程中互斥信号量的使用
- Sublime Text3/2使用windows编译器编译和运行C/C++程序
- Windows下使用Sublime Text 3调试/运行 C/C++ 程序
- Windows 7下使用GNU工具编译C/C++程序的环境搭建
- windows下使用Sublime Text3编译运行C++程序
- 【Caffe的C++接口使用说明(一)】caffe_windows下的第一个测试程序学习教程
- Windows下使用Eclipse+CDT编写C/C++程序
- 使用Eclipse+Cygwin开发Windows C++程序