做了一个测试,测试不用锁的情况下多线程操作同一个变量,看看系统会是什么后果。
代码:
public class tt
{
public tt()
{
data=0;
} public int data; public void main()
{
int k;
for(k=0;k<100;k++)
{
Thread analyseThread=new Thread(new ThreadStart(threadrun));
analyseThread.Start();
}
} void threadrun()
{
while(true)
{
int aa=data; aa++; data=aa;
if(data>=1000000)data=0;
}
}

}基本上都是能够顺利运行很长时间,只是偶尔才会导致Microsoft Visual Studio .NET 2003崩溃。按理说多线程同时对一个变量进行写入会导致系统崩溃才对。
竟然也能长时间的无错运行。why?

解决方案 »

  1.   

    基本上都是能够顺利运行很长时间,只是偶尔才会导致Microsoft Visual Studio .NET 2003崩溃。按理说多线程同时对一个变量进行写入会导致系统崩溃才对。 
    竟然也能长时间的无错运行。why? 
    ------------------------------
    你说的同时,在单核心的机器上,都仅仅是宏观上的同时,在微观层面上,还是一个个来的,无非就是结果可能不正确罢了。
    对于多核心的机器,也不会导致崩溃,两个三个CPU核心同时写个内存单元而已,这也崩溃,计算机也太脆弱了吧。甚至由于内存控制器的关系,几个核心能不能同时写还两说呢。
      

  2.   

    会导致data数据写入被覆盖而已,按道理程序不会crash.
      

  3.   

    崩溃倒不会.至于当你所有线程总共做完了1000次data=aa后data是不是等于1000
    这个就不能保证了.
      

  4.   

    哪为什么有时候会导致Microsoft Visual Studio .NET 2003崩溃呢?
      

  5.   

    ..区区一个int型变量,又怎会使.NET崩溃呢?