为什么不用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;
}

是不是全局变量的问题?全局变量存在数据段的原因?

posted @ 2012-10-29 13:11  我想玩野  阅读(451)  评论(0)    收藏  举报