VC++线程同步解析
2012-08-10 14:21:29 来源:WEB开发网核心提示:下面给出就是对前面的示例代码经CMutex 类改写后的程序实现清单:// MFC 互斥类对象CMutex g_clsMutex(FALSE, NULL);UINT ThreadProc27(LPVOID pParam){// 等待互斥对象通知g_clsMutex.Lock();// 对共享资源进行写入操作for (in
下面给出就是对前面的示例代码经CMutex 类改写后的程序实现清单:
// MFC 互斥类对象
CMutex g_clsMutex(FALSE, NULL);
UINT ThreadProc27(LPVOID pParam)
{
// 等待互斥对象通知
g_clsMutex.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
g_cArray[i] = 'a';
Sleep(1);
}
// 释放互斥对象
g_clsMutex.Unlock();
return 0;
}
UINT ThreadProc28(LPVOID pParam)
{
// 等待互斥对象通知
g_clsMutex.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
g_cArray[10 - i - 1] = 'b';
Sleep(1);
}
// 释放互斥对象
g_clsMutex.Unlock();
return 0;
}
……
void CSample08View::OnMutexMfc()
{
// 启动线程
AfxBeginThread(ThreadProc27, NULL);
AfxBeginThread(ThreadProc28, NULL);
// 等待计算完毕
Sleep(300);
// 报告计算结果
CString sResult = CString(g_cArray);
AfxMessageBox(sResult);
}
// MFC 互斥类对象
CMutex g_clsMutex(FALSE, NULL);
UINT ThreadProc27(LPVOID pParam)
{
// 等待互斥对象通知
g_clsMutex.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
g_cArray[i] = 'a';
Sleep(1);
}
// 释放互斥对象
g_clsMutex.Unlock();
return 0;
}
UINT ThreadProc28(LPVOID pParam)
{
// 等待互斥对象通知
g_clsMutex.Lock();
// 对共享资源进行写入操作
for (int i = 0; i < 10; i++)
{
g_cArray[10 - i - 1] = 'b';
Sleep(1);
}
// 释放互斥对象
g_clsMutex.Unlock();
return 0;
}
……
void CSample08View::OnMutexMfc()
{
// 启动线程
AfxBeginThread(ThreadProc27, NULL);
AfxBeginThread(ThreadProc28, NULL);
// 等待计算完毕
Sleep(300);
// 报告计算结果
CString sResult = CString(g_cArray);
AfxMessageBox(sResult);
}
更多精彩
赞助商链接