使用.Threading.Interlocked类可以提高线程安全性,一般情况下在子线程内使用i这样方式访问全局变量方式是不安全做法测试下面代码在test1中经过100次number,number并没有每次从0变为100而test2则没有问题
using;
using.Windows.Forms;
WindowsApplication32
{
publicpartialForm1:Form
{
publicForm1
{
InitializeComponent;
}
number=0;
///<summary>
///普通变量访问方式
///</summary>
privatevoidtest1
{
for(m=0;m<10;m)
{
number;
.Threading.Thread.Sleep(100);
}
Console.WriteLine(number);
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
number=0;
for(i=0;i<10;i)
{
.Threading.Thread(test1).Start;
}
}
///<summary>
///使用原子访问方式
///</summary>
privatevoidtest2
{
for(m=0;m<10;m)
{
.Threading.Interlocked.Increment(refnumber);
.Threading.Thread.Sleep(100);
}
Console.WriteLine(number);
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
number=0;
for(i=0;i<10;i)
{
.Threading.Thread(test2).Start;
}
}
}
}
using;
using.Windows.Forms;
WindowsApplication32
{
publicpartialForm1:Form
{
publicForm1
{
InitializeComponent;
}
number=0;
///<summary>
///普通变量访问方式
///</summary>
privatevoidtest1
{
for(m=0;m<10;m)
{
number;
.Threading.Thread.Sleep(100);
}
Console.WriteLine(number);
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
number=0;
for(i=0;i<10;i)
{
.Threading.Thread(test1).Start;
}
}
///<summary>
///使用原子访问方式
///</summary>
privatevoidtest2
{
for(m=0;m<10;m)
{
.Threading.Interlocked.Increment(refnumber);
.Threading.Thread.Sleep(100);
}
Console.WriteLine(number);
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
number=0;
for(i=0;i<10;i)
{
.Threading.Thread(test2).Start;
}
}
}
}
本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/203210,如需转载请自行联系原作者