龙空技术网

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

小智雅汇 1169

前言:

现时看官们对“c语言双线程什么意思”大致比较重视,大家都需要剖析一些“c语言双线程什么意思”的相关资讯。那么小编在网络上汇集了一些对于“c语言双线程什么意思””的相关文章,希望小伙伴们能喜欢,姐妹们快快来学习一下吧!

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

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

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

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

其实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;	}

更多实例请见:

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

-End-

标签: #c语言双线程什么意思