C\C++语言27|多线程编程

C\C++语言27|多线程编程多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。

欢迎大家来到IT世界,在知识的湖畔探索吧!

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程

基于进程的多任务处理是程序的并发执行。

基于线程的多任务处理是同一程序的片段的并发执行。

多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。

C\C++语言27|多线程编程

其实C++语言本身并没有提供多线程机制(当然目前C++ 11新特性中,已经可以使用std::thread来创建线程了),但Windows系统为我们提供了相关API,我们可以使用他们来进行多线程编程。

#include "windows.h"
#include "iostream.h"
DWORD WINAPI FunProc1(LPVOID lpParameter);
DWORD WINAPI FunProc2(LPVOID lpParameter);
int index=0;
int ticket=100;
HANDLE hMutex;
void main()
{
	HANDLE hThread1;
	HANDLE hThread2;
	hThread1=CreateThread(NULL,0,FunProc1,NULL,0,NULL);
	hThread2=CreateThread(NULL,0,FunProc2,NULL,0,NULL);
	
	hMutex=CreateMutex(NULL,TRUE,"tickets"); //第三个参数必须赋值
	if(hMutex == NULL)
	{
		cout<<"failure of Mutex creating"<<endl;
		return;
	}
	WaitForSingleObject(hMutex,INFINITE);
	ReleaseMutex(hMutex);
	ReleaseMutex(hMutex);
	CloseHandle(hThread1); 
	CloseHandle(hThread2);
	Sleep(4000);
	system("pause");
}
DWORD WINAPI FunProc1(LPVOID lpParameter)
{
	while(TRUE)
	{
		WaitForSingleObject(hMutex,INFINITE);
		if(ticket>0)
		{
			cout<<"ticket 1:"<<ticket--<<endl;
		}
		else 
			break;
		ReleaseMutex(hMutex); //不管是主线程还是兄弟线程,谁拥有,谁释放。
		Sleep(10);
	}
	return 0;
	
}
DWORD WINAPI FunProc2(LPVOID lpParameter)
{
	while(TRUE)
	{
		WaitForSingleObject(hMutex,INFINITE);
		if(ticket>0)
		{
			cout<<"ticket 2:"<<ticket--<<endl;
		}
		else 
			break;
		ReleaseMutex(hMutex); //不管是主线程还是兄弟线程,谁拥有,谁释放。
		Sleep(10);
	}
	return 0;
	
}

欢迎大家来到IT世界,在知识的湖畔探索吧!

更多实例请见:

VC|利用多线程、及线程同步技术实现火车站售票系统模拟程序

-End-

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/35026.html

(0)
上一篇 2023年 12月 8日 上午10:23
下一篇 2023年 12月 10日 上午11:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信