线程同步

当多线程访问公用数据时,可能导致一些问题

如:A线程先判断数据状态,B线程修改数据状态,再由A线程访问数据,导致数据不一致

解决的办法是使用互斥对象Mutex

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

DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int g_data=100;
HANDLE hMutex;

void main()
{

	HANDLE hThread1;
	HANDLE hThread2;
	
	hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
	hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
	
	CloseHandle(hThread1);
	CloseHandle(hThread2);
	//当不再使用线程时可以关闭它

	hMutex = CreateMutex(NULL,FALSE,NULL);

	Sleep(8000);
	cout<<"main thread is running"<<endl;
}

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
	
	while(TRUE)
	{
		WaitForSingleObject(hMutex,INFINITE);
		if(g_data>0)
		{
			Sleep(100);
			g_data--;
			cout<<"thread1 is running "<<g_data<<endl;
		}
		else
		{
			break;
		}
		ReleaseMutex(hMutex);
	}
	
	return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
	while(TRUE)
	{
		WaitForSingleObject(hMutex,INFINITE);
		if(g_data>0)
		{
			Sleep(1);
			g_data--;
			cout<<"thread2 is running "<<g_data<<endl;
		}
		else
		{
			break;
		}
		ReleaseMutex(hMutex);
	}
	return 0;
}
posted @ 2012-02-04 12:36  哈哈开心  阅读(204)  评论(0)    收藏  举报