c# 锁的一点尝试和总结

本文提供了一个使用C#编写的简单线程加锁示例。通过创建两个线程并利用lock指令确保对共享资源number的安全访问,演示了如何防止竞态条件。当一个线程在修改number时,另一个线程将处于等待状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

namespace ConsoleApplication1
{
    class Program
    {
        private static object locker = new object();
        private static int number = 0;

        private static Thread t1;

        private static Thread t2;
        /// <summary>
        /// 加锁示例
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            t1 = new Thread(makenumber);
            t2 = new Thread(makenumber);

            t1.Start();
            t2.Start();
        }

        private static void makenumber()
        {
            while (true)
            {
                Console.WriteLine("T1线程状态" + t1.ThreadState);
                Console.WriteLine("T2线程状态" + t2.ThreadState);
                
                lock (locker)
                {
                    number += 100;
                    Console.WriteLine("线程加锁");
                    Thread.Sleep(1000);
                    Console.WriteLine(number);
                }
            }
        
        }
    }
}

加锁的效果是只能一个线程访问变量,当一个线程在访问变量时,另一个线程就是waitsleepjoin状态。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

December丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值