一个简单的多线程题目
来源:互联网 发布:华为it应用技术工程师 编辑:程序博客网 时间:2024/05/22 11:06
今天看到一个简单的多线程题目,自己写了一下,功能基本实现,如有问题还望指出交流;
题目:编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
// TEST-3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <Windows.h>#include <process.h>CRITICAL_SECTION g_cs; //题目较简单,没有用到临界区HANDLE g_SemaphoreA,g_SemaphoreB,g_SemaphoreC;int g_nNum = 0;bool g_bFlag = true;unsigned int __stdcall FunA(PVOID pPm){while(g_bFlag){WaitForSingleObject(g_SemaphoreA,INFINITE);if (g_nNum ==10){ReleaseSemaphore(g_SemaphoreA,1,NULL);ReleaseSemaphore(g_SemaphoreB,1,NULL);ReleaseSemaphore(g_SemaphoreC,1,NULL);g_bFlag = false;break;}else++g_nNum;printf("A:第%d次打印,ID%d\r\n",g_nNum,GetCurrentThreadId());ReleaseSemaphore(g_SemaphoreB,1,NULL);Sleep(10);}return 0;}unsigned int __stdcall FunB(PVOID pPm){while(g_bFlag){WaitForSingleObject(g_SemaphoreB,INFINITE);printf("B:第%d次打印,ID%d\r\n",g_nNum,GetCurrentThreadId());ReleaseSemaphore(g_SemaphoreC,1,NULL);Sleep(10);}return 0;}unsigned int __stdcall FunC(PVOID pPm){while(g_bFlag){WaitForSingleObject(g_SemaphoreC,INFINITE);printf("C:第%d次打印,ID%d\r\n",g_nNum,GetCurrentThreadId());ReleaseSemaphore(g_SemaphoreA,1,NULL);Sleep(10);}return 0;}int _tmain(int argc, _TCHAR* argv[]){g_SemaphoreA = CreateSemaphore(NULL,1,3,NULL);g_SemaphoreB = CreateSemaphore(NULL,0,3,NULL);g_SemaphoreC = CreateSemaphore(NULL,0,3,NULL);InitializeCriticalSectionAndSpinCount(&g_cs,4000);HANDLE hThread[3];hThread[0]=(HANDLE)_beginthreadex(NULL,0,FunA,NULL,0,NULL);hThread[1]=(HANDLE)_beginthreadex(NULL,0,FunB,NULL,0,NULL);hThread[2]=(HANDLE)_beginthreadex(NULL,0,FunC,NULL,0,NULL);WaitForMultipleObjects(3,hThread,TRUE,INFINITE);CloseHandle(g_SemaphoreA);CloseHandle(g_SemaphoreB);CloseHandle(g_SemaphoreC);DeleteCriticalSection(&g_cs);for (int i = 0 ;i<3;++i){CloseHandle(hThread[i]);}return 0;}
运行结果:
0 0
- 一个简单的多线程题目
- 一个简单的题目
- 一个简单的多线程
- 一个简单的Java题目
- 一个简单的SQL题目
- 一个简单的算法题目
- c 的一个简单题目
- 一个没有完成的多线程题目
- 一个简单的多线程 pthread_detach
- 一个简单的多线程 pthread_detach
- 一个简单的多线程socket
- 一个简单的多线程示例
- 一个简单的c语言题目
- 编写一个最简单的交互式题目
- 一个程序员面试题目的简单分析
- 一个简单的C++面试题目
- 一个简单的类设计题目
- 一个简单的C语言题目
- Android-对ListView的Adapter的一种简单封装
- Eclipse键盘控之路
- LigerUi中Grid表记录根据条件显示不同颜色和不同内容!(实例)
- uimsbf和 bslbf的含义
- Android Service,startService binderService 以及 AIDL
- 一个简单的多线程题目
- 揭秘百度核心技术:53位专家纯干货分享
- Android -- 数据库1
- 线索二叉树的两种方法
- 微信公众平台和微信开放平台的区别
- put和post
- cmd命令大全/cmd命令提示符大全
- hdu 2824 The Euler function
- Python正则表达式指南