互斥对象可以在进程间使用,而临界区对象只能在同一进程的各个线程间使用。虽然互斥对象也可用于同一进程的各个线程间,但是在这种情况下,使用临界区对象会更节省系统资源,更有效率。
以CCriticalSection类的使用为例:
//定义全局CMutexhe CSingleLock类的对象
CMutex mutex;
CSingleLock singlelock(&mutex);
UINT WriteA(LPVOID pParam)
{
CEdit *pEdit = (CEdit*)pParam;
pEdit->SetWindowText(_T(""));
singlelock.Lock();
//锁定临界区,其他线程遇到singlelock.Lock()语句时要等待
//知道执行singlelock.Unlock()语句
for (int i = 0; i < 9; i++)
{
g_Array[i] = _T('A');
pEdit->SetWindowText(g_Array);
Sleep(1000);
}
singlelock.Unlock();
return 0;
}
UINT WriteB(LPVOID pParam)
{
CEdit *pEdit = (CEdit*)pParam;
pEdit->SetWindowText(_T("\0"));
singlelock.Lock();
//临界区资源
for (int i = 0; i < 9; i++)
{
g_Array[i] = _T('B');
pEdit->SetWindowText(g_Array);
Sleep(1000);
}
singlelock.Unlock();
return 0;
}