在多线程编程中,可能会有多个线程并发的(或同时)执行一段代码,但是某些情况下需要在同一时刻只能有一个线程执行,避免某些对象的调用冲突或内存使用冲突,这就需要用到锁(lock)。lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。在同一个时刻内只允许一个线程进入执行,而其他线程必须等待。
public partial class TestWindow : Window { private static object lockObj = new object();//定义锁 private int _totalNum = 0; public TestWindow() { InitializeComponent(); } private void OnTest() { while (true) { lock (lockObj) { _totalNum++; string name = Thread.CurrentThread.Name; Console.WriteLine("_totalNum:{0}", _totalNum); Thread.Sleep(3000); } } } private void btnTest1_Click(object sender, RoutedEventArgs e) { //多个线程 Thread t1 = new Thread(OnTest); t1.Name = "td1"; t1.IsBackground = true; t1.Start(); Thread t2 = new Thread(OnTest); t2.Name = "td2"; t2.IsBackground = true; t2.Start(); } }以上例子测试结果就是有线程锁的情况,间隔3秒才会有输出,通过属性线程名字可以确定是不同线程执行的,如果去掉线程锁,则会同时输出。