多线程编程实例

1、创建一个线程用CreateThread函数

参数1:指向SECURITY_ATTRIBUTE结构体的一个指针,再次可以设置为NULL,缺省的安全性

参数2:指定初始提交的栈的大小,以字节为单位。可以设置为0,使用默认大小。

参数3:指向一个LSPTHREAD_START_ROUTING类型的应用程序定义个函数的指针,该函数将被线程指向,表示了线程的起始地址。ThreadProc函数,函数名可以改变。

参数4:指定一个单独的参数的值,传递给线程函数ThreadProc。

参数5:指定控制线程创建的附加标记,如果CREATE_SUSPENDED被指定,线程创建后处于暂停状态,直到调用ResumeThread函数。如果该值为0,线程创建后立即执行。

参数6:返回值参数,用于接收线程的标识符。在系统(NT/2000)下可以设置为NULL。

2、多线程演示火车票售票系统,包含互斥对象的使用

#include <iostream>
#include <Windows.h>
#include <stdio.h>
using namespace std;

DWORD WINAPI ThreadProc1(LPVOID lpParameter);//线程函数定义
DWORD WINAPI ThreadProc2(LPVOID lpParameter);//线程函数定义

int index = 0;
int tickets = 100;
HANDLE hMutex;
int _tmain(int argc, _TCHAR* argv[])
{
	
	HANDLE hThread1;
	HANDLE hThread2;
	hThread1 = CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
	hThread2 = CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
	CloseHandle(hThread1);//关闭线程句柄,注意,此时线程还在。只不过线程内核对象的引用计数减一,减为0时,线程释放。
	CloseHandle(hThread2);	

	hMutex = CreateMutex(NULL,FALSE,NULL);//创建一个匿名互斥对象,FALSE则说明没有线程拥有该互斥对象,所以为有信号状态

	/*while(index++ < 1000)
		cout << "main Thread is running!" << endl;*/
	Sleep(4000);
	return 0;
}

DWORD WINAPI ThreadProc1(LPVOID lpParameter)//线程函数实现
{
	/*while(index++ < 1000)
		cout << "Thread1 Thread is running!" << endl;*/
	
	while (TRUE)
	{
		WaitForSingleObject(hMutex,INFINITE);//请求互斥对象,当互斥对象有信号时可以被请求
		if (tickets > 0)
		{
			
			cout << "Thread1 sell ticket is : " << tickets-- << endl;
			
		}
		else
		{
			break;
		}
		ReleaseMutex(hMutex);//释放指定互斥对象的所有权,是互斥对象变为有信号状态。

	}
	return 0;
}

DWORD WINAPI ThreadProc2(LPVOID lpParameter)//线程函数实现	
{
	/*while(index++ < 1000)
		cout << "Thread2 Thread is running!" << endl;*/

	while (TRUE)
	{
		WaitForSingleObject(hMutex,INFINITE);//请求互斥对象,当互斥对象有信号时可以被请求,参数2意思是如果不释放互斥对象,则一直拥有
		
		if (tickets > 0)
		{
			Sleep(10);
			cout << "Thread2 sell ticket is : " << tickets-- << endl;
			
		}
		else
		{
			break;
		}
		ReleaseMutex(hMutex);//释放指定互斥对象的所有权,是互斥对象变为有信号状态。
	}

	return 0;
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值