博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模拟订票系统学习多线程
阅读量:5010 次
发布时间:2019-06-12

本文共 2741 字,大约阅读时间需要 9 分钟。

#include 
#include
//线程函数声明 DWORD WINAPI FuncProc1( LPVOID lpParameter//thread data ); DWORD WINAPI FuncProc2( LPVOID lpParameter//thread data ); //int index = 0; int tickets = 100; HANDLE hMutex; //互斥对象 int main() {
HANDLE hThread1; HANDLE hThread2; hThread1 = CreateThread(NULL,//pointer to security attributes 0, //initial thread stack size FuncProc1, // pointer to thread function NULL, // argument for new thread 0, // creation flags NULL); // pointer to receive thread ID hThread2 = CreateThread(NULL, 0, FuncProc2, NULL, 0, NULL); CloseHandle(hThread1); CloseHandle(hThread2); /*while (index++ < 1000) {
cout << "main thread is running" << endl; }*/ hMutex = CreateMutex(NULL,// pointer to security attributes TRUE, // flag for initial ownership "tickets" // pointer to mutex-object name ); //可以利用上用"tickets"命名来判断只能运行一个实例 if (hMutex) {
if (ERROR_ALREADY_EXISTS == GetLastError()) {
cout << "Only one instance can run!" << endl; return 0; } } /* 这个地方线程互斥量已在主线程中,执行下面该语句名互斥量变为2, 则下面ReleaseMutex函数需要执行两次才能完全释放,让子线程去执行*/ WaitForSingleObject(hMutex,INFINITE); ReleaseMutex(hMutex);//此处需要释放主线程创建时得到的互斥量,否则子线程不执行 ReleaseMutex(hMutex);// Sleep(4000); return 0 ; } //线程函数定义 DWORD WINAPI FuncProc1(LPVOID lpParameter //thread data ) {
/*while(index++ < 1000) {
cout << "thread1 is running" << endl; }*/ while(TRUE) {
//ReleaseMutex(hMutex); WaitForSingleObject(hMutex,//handle to object to wait for INFINITE //time-out interval in milliseconds:INFINITE, the function's time-out interval never elapses. ); if (tickets>0) {
Sleep(10); cout << "Thread1 sell tickets: " << tickets-- << endl; } else {
break; } ReleaseMutex(hMutex); } return 0; }; DWORD WINAPI FuncProc2( LPVOID lpParameter//thread data ) {
while(TRUE) {
//ReleaseMutex(hMutex); WaitForSingleObject(hMutex,INFINITE); if (tickets>0) {
Sleep(10); cout << "Thread2 sell tickets: " << tickets-- << endl; } else {
break; } ReleaseMutex(hMutex); } return 0; }
posted on
2012-03-11 17:44 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/kernel0815/archive/2012/03/11/2390377.html

你可能感兴趣的文章
Codeforces Round #344 (Div. 2) Messager KMP的应用
查看>>
20145308刘昊阳 《Java程序设计》第4周学习总结
查看>>
js倒计时
查看>>
EasyUI datagrid 格式 二
查看>>
Android虹软人脸识别sdk使用工具类
查看>>
UI:基础
查看>>
浅谈 @RequestParam 和@PathVariable
查看>>
设计模式之---装饰器设计模式
查看>>
基于WordNet的英文同义词、近义词相似度评估及代码实现
查看>>
Equation漏洞混淆利用分析总结(上)
查看>>
shell学习1shell简介
查看>>
Qt 【无法打开 xxxx头文件】
查看>>
JAVA项目将 Oracle 转 MySQL 数据库转换(Hibernate 持久层)
查看>>
三层架构(我的理解及详细分析)
查看>>
Django模板语言相关内容
查看>>
前端开发工程师如何在2013年里提升自己【转】--2016已更新升级很多何去何从?...
查看>>
markdown语法测试集合
查看>>
running and coding
查看>>
实现QQ第三方登录、网站接入
查看>>
HTML CSS 层叠样式表 三
查看>>