临界区(Critical section)与互斥体(Mutex)的区别
1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥体可以用于对象进程间或线程间的互斥访问。
2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥体是内核对象,在核心态进行锁操作,速度慢。3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥体可用。
相关的获取和退出函数都要配对使用:
DWORD WINAPI threadFun1(PVOID lp)
{
::EnterCriticalSection(&g_ct);
//WaitForSingleObject(g_Event1, INFINITE);
while(g_num>0)
{
//WaitForSingleObject(g_mtx, INFINITE);
cout<<"threadFun1: "<<g_num--<<endl;
Sleep(10);
//::ReleaseMutex(g_mtx);
//SetEvent(g_Event1);
::LeaveCriticalSection(&g_ct);
}
return 0;
}