1. 对原子访问的说明
情形:线程同步中大部分情况与原子访问有关。
作用:原子访问可以保证一个线程在访问资源的同时没有其他线程访问同一资源。
原因:Windows是抢占式多线程环境,多个线程同时操作同一个全局变量时,可能并不是如预期中的先后
执行,而是抢占式执行,最终结果难以预期。
2. 未使用原子访问时,代码示例及执行结果说明
#include "stdafx.h"
#include <process.h> // _beginthreadex
#include <windows.h>
#include <stdlib.h>
#define THREAD_NUM 50 // 线程数量
int g_Num = 0; // 全局变量
unsigned int _stdcall ThreadFunc(void* pvoid);
unsigned int _stdcall ThreadFunc(void* pvoid)
{
Sleep(100);
g_Num++;
//InterlockedIncrement((LPLONG)&g_Num);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
int AccessCount = 20; // 设置访问次数
HANDLE handle[THREAD_NUM]; // 线程句柄
while(--AccessCount)
{
g_Num = 0;
for (int i=0;i<THREAD_NUM;i++)
{
handle[i]=(HANDLE)_beginthreadex(NULL,0,ThreadFunc,NULL,0,NULL);// 创建线程
}
WaitForMultipleObj