Monitor的TryEnter方法,不管获得或没获得锁都会立既返回False,如果得到锁就返回True,它不必像Enter方法那样没有得到锁就等待。
所以通过这个特征我们可以指示线程在获得锁的情况下执行一个操作,在没有获得锁的情况下执行另一个操作。
运行下面的例子,你会发现最终只有一个线程进行了操作。第一个进入锁定代码块的线程开始操作时,另一个线程过来访问锁定代码块时发现已被锁定,就会执行下面else里面的语句,执行完后该线程会退出系统,所以这样只有一个线程进行了操作。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Thread.CurrentThread.Name = "主线程";
Thread th = new Thread(new ThreadStart(DoWork));
th.Name = "子线程";
th.Start();
DoWork();
}
/// <summary>