理解 COM 套间
2006-07-22 22:58:03 来源:WEB开发网如何解决这个问题呢?我们需要利用同步机制来控制我们的多线程程序,现在我们使用临界区来解决这个问题。代码如下:(在Code的MultiThreading中将进入临界区和离开临界区的代码前的注释去掉就可以了)
#include <iostream>
再次运行,结果就是我们所需要的了。
#include <windows.h>
int g_i = 10; //一个全局变量
CRITICAL_SECTION cs; //一个临界区变量
DWORD WINAPI ThreadProc(LPVOID lpv)
{
EnterCriticalSection(&cs); //进入临界区
g_i += 10;
std::cout <<"In the Thread " << ::GetCurrentThreadId() << ",the first g_i is " << g_i << "!" << std::endl;
::LeaveCriticalSection(&cs);
Sleep(5000); //睡眠
EnterCriticalSection(&cs);
g_i += 10;
std::cout <<"In the Thread " << ::GetCurrentThreadId() << ",the secend g_i is " << g_i << "!" << std::endl;
::LeaveCriticalSection(&cs);
return 0;
}
int main(int argc, char* argv[])
{
DWORD threadID[2];
HANDLE hThreads[2];
InitializeCriticalSection(&cs);
for(int i = 0; i <= 1; i++ ) //创建两个线程
hThreads[i] = ::CreateThread(NULL,
0,
ThreadProc,
NULL,
0,
&threadID[i]);
WaitForMultipleObjects(2,hThreads,TRUE,INFINITE); //等待线程结束
for(i = 0; i <= 1; i++ )
::CloseHandle(hThreads[i]); //关闭线程句柄
system("pause");
return 0;
}
更多精彩
赞助商链接