线程同步

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

如: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;

}

你可能感兴趣的:(线程同步)