做了一个测试,测试不用锁的情况下多线程操作同一个变量,看看系统会是什么后果。
代码:
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?
代码:
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?
竟然也能长时间的无错运行。why?
------------------------------
你说的同时,在单核心的机器上,都仅仅是宏观上的同时,在微观层面上,还是一个个来的,无非就是结果可能不正确罢了。
对于多核心的机器,也不会导致崩溃,两个三个CPU核心同时写个内存单元而已,这也崩溃,计算机也太脆弱了吧。甚至由于内存控制器的关系,几个核心能不能同时写还两说呢。
这个就不能保证了.