有四种同步方法:互斥体(Mutex),事件(Event),临界区(Critical Section),以及信号量(Semaphore)。 注:以下所说的“全局变量”也可换为局部变量,只要各线程(包括主线程)能访问即可。
1、使用Mutex
定义全局变量HANDLE hMutex;在主线程中调用hMutex = CreateMutex(NULL, FALSE, NULL);(参数的具体含义请查看MSDN)然后,在子线程中:
WaitForSingleObject(hMutex);
[[受保护的代码]]ReleaseMutex(hMutex);2、使用Event
定义全局变量HANDLE hEvent;在主线中调用hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);(参数的具体含义请查看MSDN)然后,在子线程中:
WaitForSingleObject(hEvent);
[[受保护的代码]]ResetEvent(hEvent);3、使用CRITICAL_SECTION
定义全局变量CRITICAL_SECTION cs;在主线中调用InitializeCriticalSection(&cs);然后,在子线程中:EnterCriticalSection(&cs);
[[受保护的代码]]LeaveCriticalSection(&cs);4、使用Semaphore
定义全局变量HANDLE hSemaphore;在主线中调用hSemaphore = CreateSemaphore(NULL,lInitialCount,lMaximumCount,NULL);(参数的具体含义请查看MSDN)然后,在子线程中:
WaitForSingleObject(hSemaphore);
[[受保护的代码]]ReleaseSemaphore(hSemaphore,lReleaseCount,NULL);MFC类的情况:1、使用CMutex定义全局变量CMutex mutex;然后,在子线程中:
mutex.Lock();
[[受保护的代码]]mutex.Unlock();2、使用CEvent
由于事件(Event)的用法比较复杂,暂时还没弄清楚。3、使用CCriticalSection
定义全局变量CCriticalSection cs;然后,在子线程中:cs.Lock();
[[受保护的代码]]cs.Unlock();4、使用CSemaphore
定义全局变量CSemaphore semaphore(lInitialCount, lMaximumCount);(参数的具体含义请查看MSDN)然后,在子线程中:
semaphore.Lock();
[[受保护的代码]]semaphore.Unlock();以上说法若有任何错误,还请指正。