多线程之间变量锁的实现
在C#中应用多线程时,经常需要给变量进行加锁,来防止程序的混乱。接下来就是对两个线程中的变量进行加锁的小程序。
1 public partial class Form1 : Form 2 { 3 string a = ""; 4 static object locker = new object(); 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 10 private void button1_Click(object sender, EventArgs e) 11 { 12 Thread a1 = new Thread(new ThreadStart(change1)); 13 a1.IsBackground = true; 14 Thread a2 = new Thread(new ThreadStart(change2)); 15 a2.IsBackground = true; 16 a1.Start(); 17 a2.Start(); 18 } 19 private void change1() 20 { 21 lock (locker) 22 { 23 a = "1"; 24 Thread.Sleep(5000); 25 MessageBox.Show(a); 26 } 27 } 28 private void change2() 29 { 30 lock (locker) 31 { 32 a = "2"; 33 MessageBox.Show(a); 34 } 35 } 36 }
a就是要操作的变量,线程开始前声明了一个变量,object locker准备进行加锁,在change1和change2中给locker进行加锁,使a的值不发生冲突,线程一使a的值为1,线程二使a的值为2,程序的运行效果时,先等5秒,线程一显示1,之后线程二才开始运行,显示2。