C++多线程编程(windows API)

本文详细介绍了并发编程中的关键概念,包括线程、互斥锁的使用及线程安全问题。通过实例展示了如何在多线程环境中正确地管理资源访问,确保程序的稳定性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <windows.h>

using namespace std;

DWORD WINAPI Fun1Pro(LPVOID lpParameter);
DWORD WINAPI Fun2Pro(LPVOID lpParameter);

int tickets = 100;
HANDLE hMutex = NULL;

void main()
{
	hMutex = CreateMutex(NULL, FALSE, NULL);//这句话要放在线程初始化之前初始化,因为如果  
							//放在之后注释的位置初始化可能导致线程线程已经开始执行了,并且执行到
							//WaitForSingleObject(hMutex, INFINITE);这段话,结果发现hMutex没有初始化
							//这样就会出现无法预料的问题。(孙鑫老师的教程中这里讲错了) 
	HANDLE hThread1;
	HANDLE hThread2;
	hThread1 = CreateThread(NULL, 0, Fun1Pro, NULL, 0, NULL);
	hThread2 = CreateThread(NULL, 0, Fun2Pro, NULL, 0, NULL);
	CloseHandle(hThread1);
	CloseHandle(hThread2);
	//hMutex = CreateMutex(NULL, FALSE, NULL);
	Sleep(1000);
}

DWORD WINAPI Fun1Pro(LPVOID lpParameter)
{
	while (TRUE)
	{
		WaitForSingleObject(hMutex, INFINITE);
		if (tickets > 0)
		{
			Sleep(4);
			cout << "thread1 sell ticket : " << tickets-- << endl;
		}
		else
		{
			break;
		}
		ReleaseMutex(hMutex);
	}	
	return 0;
}

DWORD WINAPI Fun2Pro(LPVOID lpParameter)
{
	while (TRUE)
	{
		WaitForSingleObject(hMutex, INFINITE);
		if (tickets > 0)
		{
			Sleep(4);
			cout << "thread2 sell ticket : " << tickets-- << endl;
		}
		else
		{
			break;
		}
		ReleaseMutex(hMutex);
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值