一个线程访问冲突的例子,为什么不 崩溃?
两个线程同时写一个变量,应该会 崩溃。但是下面的实验没有崩溃。请问怎么回事?
使用方法:启动程序后,textBox1里显示0,按BUTTON1,显示1,再按BUTTON2,则交替显示1和2,不崩溃。
public partial class Form1 : Form
{
Thread t1;
Thread t2;
private int g_var;
private bool bBtn1;
private bool bBtn2;
public Form1()
{
InitializeComponent();
}
public void thread1(object ob)
{
while(true)
{
if (bBtn1)
while (true)
g_var = 1;
Thread.Sleep(10);
}
}
public void thread2(object ob)
{
while (true)
{
if (bBtn2)
while (true)
g_var = 2;
Thread.Sleep(10);
}
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
g_var = 0;
bBtn1 = false;
bBtn2 = false;
t1 = new Thread(thread1);
t1.Start(1);
t2 = new Thread(thread2);
t2.Start();
}
private void button1_Click(object sender, EventArgs e)
{
bBtn1 = true;
}
private void button2_Click(object sender, EventArgs e)
{
bBtn2 = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = g_var.ToString();
}
}
使用方法:启动程序后,textBox1里显示0,按BUTTON1,显示1,再按BUTTON2,则交替显示1和2,不崩溃。
public partial class Form1 : Form
{
Thread t1;
Thread t2;
private int g_var;
private bool bBtn1;
private bool bBtn2;
public Form1()
{
InitializeComponent();
}
public void thread1(object ob)
{
while(true)
{
if (bBtn1)
while (true)
g_var = 1;
Thread.Sleep(10);
}
}
public void thread2(object ob)
{
while (true)
{
if (bBtn2)
while (true)
g_var = 2;
Thread.Sleep(10);
}
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
g_var = 0;
bBtn1 = false;
bBtn2 = false;
t1 = new Thread(thread1);
t1.Start(1);
t2 = new Thread(thread2);
t2.Start();
}
private void button1_Click(object sender, EventArgs e)
{
bBtn1 = true;
}
private void button2_Click(object sender, EventArgs e)
{
bBtn2 = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = g_var.ToString();
}
}
...全文



