线程同步
当多线程访问公用数据时,可能导致一些问题
如: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; }