#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
int sum = 0;
//多个线程同时访问(读、写)一个变量,就会发生冲突。
//一个变量的线程安全:多个线程同时读写没有误差。
//解决方法:临界区、事件机制、互斥量、原子操作
//原子操作的 速度快于 临界区、事件机制、互斥量
//原子操作函数,解决多线程安全
DWORD WINAPI run(void *p)
{
for (int i = 0; i < 10000; i++)
{
//sum++;
InterlockedIncrement(&sum); //sum++:保证完整操作,即我操作完成了,后面才能操作。
}
}
void main()
{
#define N 50
HANDLE hd[N];
for (int i = 0; i < N; i++)
{
hd[i] = CreateThread(NULL, 0, run, NULL,0,NULL);
}
//等待所有线程结束
WaitForMultipleObjects(N, hd, TRUE, INFINITE);
printf("%d\n", sum);
printf("%d\n", sum);
system("pause");
}
多线程-原子操作
最新推荐文章于 2024-06-27 08:43:17 发布