#include "stdafx.h"
#include <wtypes.h>
int g_n;
DWORD WINAPI ThreadPro1(LPVOID lpThreadParameter)
{
for (int i = 0; i < 100000;i++)
{
// 两个线程必须都锁住,不锁的不受影响
InterlockedIncrement((ULONG *)&g_n);
}
return 0;
}
DWORD WINAPI ThreadPro2(LPVOID lpThreadParameter)
{
for (int i = 0; i < 100000; i++)
{
InterlockedIncrement((ULONG *)&g_n);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread1 = 0, hThread2 = 0;
hThread1 = CreateThread(NULL, NULL, ThreadPro1, NULL, NULL, NULL);
hThread2 = CreateThread(NULL, NULL, ThreadPro2, NULL, NULL, NULL);
// 等待两个线程完成,INFINITE表示永远等待
WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
printf("%d\n", g_n);
system("pause");
return 0;
}
【Windows原理】线程同步-原子锁
最新推荐文章于 2026-01-28 14:20:13 发布
本文演示了在Windows环境下使用C++进行多线程编程的实例,通过两个线程并发地对全局变量进行递增操作,并利用InterlockedIncrement确保操作的原子性,避免竞态条件。

1392

被折叠的 条评论
为什么被折叠?



