共享资源是一个多大的范围???多线程同步
看下面的一个例子
UINT ThreadFunc1(LPVOID lParam)
{
CTestMutexDlg *pDlg = (CTestMutexDlg*)lParam;
::EnterCriticalSection(&pDlg->m_cs); //对话框类内变量
{
Sleep(5000);
pDlg->m_b1 = FALSE; //对话框类内变量
}
::LeaveCriticalSection(&pDlg->m_cs);
AfxMessageBox("ThreadFunc1");
return 0;
}
void CTestMutexDlg::OnButton1()
{
::EnterCriticalSection(&m_cs);
{
m_b2 = TRUE; //对话框类内变量
AfxMessageBox("OnButton1"); //
}
::LeaveCriticalSection(&m_cs);
}
void CTestMutexDlg::OnButton2()
{
AfxBeginThread(ThreadFunc1, this);
}
先按下按钮2,在5秒钟内再按下按钮1,
我原来以为线程中访问m_b1,而按钮1中访问的是m_b2,它们不是同一个变量,所以按钮1中的代码可以即时访问m_b2,而不用
等待线程ThreadFunc1,可是实际上按钮1中要等待线程访问完成后才能访问m_b2,为什么?
共享资源的范围有多大啊