做了一个测试,测试不用锁的情况下多线程操作同一个变量,看看系统会是什么后果。
代码:
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?
解决方案 »
- 大神们,你们遇过这问题吗?
- DataGridView指定行颜色
- 这里有入门教学区或讨论社区吗?
- 按钮事件问题
- 求助 c#画直方和正态分布图
- 高薪诚聘 .NET程序员
- 插入数据时出现 [System.Data.OracleClient.OracleException] = {由于线程停在某个无法进行垃圾回收的点(可能是因为已对代码进行了优化),因此无法计算表达式的值。} 使用强类做底层,是怎么回事?
- 各给前辈大家好 小弟在凌晨2点给大家发帖了 希望大家能帮帮忙
- EXCEL中URL的存储问题,急!!!
- 求助各位大侠,关于checkedlistbox的问题
- C# 怎么打开二进制文件
- 高手请进,帮新手看线性表倒置的问题。
竟然也能长时间的无错运行。why?
------------------------------
你说的同时,在单核心的机器上,都仅仅是宏观上的同时,在微观层面上,还是一个个来的,无非就是结果可能不正确罢了。
对于多核心的机器,也不会导致崩溃,两个三个CPU核心同时写个内存单元而已,这也崩溃,计算机也太脆弱了吧。甚至由于内存控制器的关系,几个核心能不能同时写还两说呢。
这个就不能保证了.