为什么不用volatile关键字声明的变量,却能在多线程共享变量改变数据?
#include <stdio.h>
#include <windows.h>
/*
多线程共享变量实验
问题:为什么不用volatile关键字声明的变量,却能在多线程共享变量改变数据?
在main函数运行的那个死循环里的k不是默认从寄存器里拿出来的吗?
求解析volatile在多线程共享的变量如何使用?
*/
int k=100;
//volatile int k=100;
DWORD WINAPI fun1(void)
{
while (1)
{
printf("##############\n");
k=rand()%100;//产生一个0~99的随机数
Sleep(500);//休眠500
}
}
int main(void)
{
CreateThread (NULL, 0, fun1, NULL, 0, NULL);//创建一个多线程
while(1)
{
printf("k=%d\n",k);
Sleep(100);
}
return 0;
}
是不是全局变量的问题?全局变量存在数据段的原因?

浙公网安备 33010602011771号