CCriticalSection g_criSection;//临界区
CWinThread* funone;
CWinThread* funtwo;
UINT FunOne(LPVOID pParam)
{ //给数组赋值
g_criSection.Lock();//给所有使用的资源上锁
for(int i =0; i < 4; i++){
g_charArray[i] = 'S';
}
g_criSection.Unlock(); //给使用的资源解锁
return 0;
}
UINT FunTwo(LPVOID pParam)
{//得到数组值
g_criSection.Lock();//给所有使用的资源上锁
for(int i =0; i < 4; i++){
g_charArray[i] = 'B';
}
funone->ResumeThread();//启动之前被挂起的线程。
g_criSection.Unlock(); //给使用的资源解锁
return 0;
}
funone = ::AfxBeginThread(FunOne,NULL,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); //FunOne给数组赋值全为S
funtwo = ::AfxBeginThread(FunTwo,NULL); //FunTwo也给数组赋值全为B
第一个线程创建之后就处于挂起状态
第二个线程创建之后就立即运行
使用ResumeThread()运行挂起的线程
CWinThread* funone;
CWinThread* funtwo;
UINT FunOne(LPVOID pParam)
{ //给数组赋值
g_criSection.Lock();//给所有使用的资源上锁
for(int i =0; i < 4; i++){
g_charArray[i] = 'S';
}
g_criSection.Unlock(); //给使用的资源解锁
return 0;
}
UINT FunTwo(LPVOID pParam)
{//得到数组值
g_criSection.Lock();//给所有使用的资源上锁
for(int i =0; i < 4; i++){
g_charArray[i] = 'B';
}
funone->ResumeThread();//启动之前被挂起的线程。
g_criSection.Unlock(); //给使用的资源解锁
return 0;
}
funone = ::AfxBeginThread(FunOne,NULL,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); //FunOne给数组赋值全为S
funtwo = ::AfxBeginThread(FunTwo,NULL); //FunTwo也给数组赋值全为B
第一个线程创建之后就处于挂起状态
第二个线程创建之后就立即运行
使用ResumeThread()运行挂起的线程