Mutex线程同步 (C/C++ Windows Platform SDK 实现)

最近对Windows Platform SDK和MFC编程比较感兴趣,工作之余(我是搞.NET的C/S编程),写了写小程序消遣。o(∩_∩)o... 首先是关于线程同步的:
#include <windows.h>

#include <iostream.h>



//线程方法

DWORD WINAPI Run1(LPVOID lpParam);

DWORD WINAPI Run2(LPVOID lpParam);

HANDLE hMutex;

int count;

void main()

{

	//创建互斥体,或者我们学OS时叫信号量

	hMutex = CreateMutex(NULL,false,"ThreadSync");

	//如果程序已经运行,则退出

	if(hMutex&&ERROR_ALREADY_EXISTS==GetLastError())

	{

		cout<<"Instance has already run."<<endl;

		return;

	}

	count = 100;

	HANDLE hThread1 = CreateThread(NULL,0,Run1,NULL,0,NULL);

	CloseHandle(hThread1);

	HANDLE hThread2 = CreateThread(NULL,0,Run2,NULL,0,NULL);

	CloseHandle(hThread2);

	Sleep(5000);

}

DWORD WINAPI Run1(LPVOID lpParam)

{

	while(true)

	{

		//获得Mutex

		WaitForSingleObject(hMutex,INFINITE);

		if(count>0)

		{

			Sleep(1);

			cout<<"Thread 1 No."<<count<<endl;

			count--;

			//释放Mutex

			ReleaseMutex(hMutex);

		}

		else

		{

			ReleaseMutex(hMutex);

			break;

		}

		

	}

	return 0;

}

DWORD WINAPI Run2(LPVOID lpParam)

{

	while(true)

	{

		WaitForSingleObject(hMutex,INFINITE);

		if(count>0)

		{

			Sleep(1);

			cout<<"Thread 2 No."<<count<<endl;

			count--;

			ReleaseMutex(hMutex);

		}

		else

		{

			ReleaseMutex(hMutex);

			break;

		}

		

	}

	return 0;

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值