C# LOCK测试

定义了一个DataTable  dt,两个Button,一个createDt,启动一个线程createThread ,死循环往dt里写数据。另一个deleteDt,启动别一个线程deleteThread ,手动点击,清空dt。原码如下:
    public partial class Form1 : Form
    {
         DataTable dt;
        public Form1()
        {
            InitializeComponent();
            dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[] { new DataColumn("number_id", typeof(int)) });
        }

        private void createDt_Click(object sender, EventArgs e)
        {
            Thread createThread = new Thread(TheaderCreate);
            createThread.IsBackground = true;
            createThread.Start();
        }
         void TheaderCreate()
        {

        int x = 0;
            lock (dt)
            {
                while (true)
                {
                    x++;
                    DataRow dr = dt.NewRow();
                    dr[0] = x;
                    dt.Rows.Add(dr);

              Thread.Sleep(100);
                }
            }
        }
        private void deleteDt_Click(object sender, EventArgs e)
        {
            Thread deleteThread = new Thread(ThreadDelete);
            deleteThread.IsBackground = true;
            deleteThread.Start();
        }
         void ThreadDelete()
        {
           dt.Clear();
        }

按网上的解释,createThread 线程应该是一直占着dt的,deleteThread 线程获取不了dt的使用权。但是结果是:我点击deleteDt的时候,表被清空了!

求解答一下,谢谢大神!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值