在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。